Kimi LeetCode 54. 螺旋矩阵 C语言实现
2026/9/7 9:10:32 网站建设 项目流程

LeetCode 54. 螺旋矩阵,C 语言实现。

思路

维护四个边界变量,按顺时针逐层收缩遍历,将结果存入动态分配的数组中。

C 实现

/** * Note: The returned array must be malloced, assume caller calls free(). */int*spiralOrder(int**matrix,intmatrixSize,int*matrixColSize,int*returnSize){if(matrixSize==0||matrixColSize[0]==0){*returnSize=0;returnNULL;}intm=matrixSize;intn=matrixColSize[0];inttotal=m*n;int*result=(int*)malloc(total*sizeof(int));*returnSize=total;inttop=0,bottom=m-1;intleft=0,right=n-1;intidx=0;while(top<=bottom&&left<=right){// 1. 从左到右遍历 top 行for(intcol=left;col<=right;col++){result[idx++]=matrix[top][col];}top++;// 2. 从上到下遍历 right 列for(introw=top;row<=bottom;row++){result[idx++]=matrix[row][right];}right--;// 3. 从右到左遍历 bottom 行(需检查是否还有行)if(top<=bottom){for(intcol=right;col>=left;col--){result[idx++]=matrix[bottom][col];}bottom--;}// 4. 从下到上遍历 left 列(需检查是否还有列)if(left<=right){for(introw=bottom;row>=top;row--){result[idx++]=matrix[row][left];}left++;}}returnresult;}

复杂度

  • 时间复杂度:O(m × n),每个元素访问一次
  • 空间复杂度:O(1),不计输出数组(输出数组由调用方free

关键点

要点说明
动态分配malloc(total * sizeof(int)),调用方负责free
returnSize必须设置,LeetCode 通过它知道返回数组长度
空矩阵处理matrixSize == 0时返回NULLreturnSize = 0
边界检查步骤 3 和 4 的if防止单行/单列时重复遍历
索引递增idx++依次填充结果数组

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询