打卡 54.螺旋矩阵 折磨

万事开头难
这题用的做螺旋矩阵Ⅱ的思路来的,按着Carl大佬的循环不变量来的,我学艺不精,代码东拼西凑,缝缝补补,硬跑出来的,代码看起来很奇怪,但是这样它才能跑出来。
后续再试试其他大佬的思路。
在这里插入图片描述

在这里插入图片描述

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize){

int *ans = (int*)malloc(sizeof(int) * matrixSize * (*matrixColSize));
    
  //起始位置
  int startX = 0;
  int startY = 0;
  //偏移量
  int offest = 1;
  int n = matrixSize;   //行数
  int m = matrixColSize[0]; //列数

  int index = 0;  
  int loop = (m / 2)>(n / 2)?(m/2):(n/2);
  
  if(n == 1) {
      index += m;
       *returnSize = index; 
      return  matrix[0];
  } 
  if(m == 1){
      for(int i = 0;i<n;i++)
      ans[index++] = matrix[i][0];
      return ans;
  }
  while(loop){
      int i = startX;
      int j = startY;

      for(;j < m - offest;j++){
        ans[index++] = matrix[startX][j];
        *returnSize = index;
        if(index == m * n) return ans;
        
      }
       for(;i < n - offest;i++){ 
         ans[index++] = matrix[i][j];
         *returnSize = index;
         if(index == m * n) return ans;
       }
        for(;j > startY;j--){
         ans[index++] = matrix[i][j];
         *returnSize = index;
        if(index == m * n) return ans;
        }
         for(;i > startX;i--){
         ans[index++] = matrix[i][j];
         *returnSize = index;
        if(index == m * n) return ans;      
         }

        startX++;
        startY++;
        loop--;
        offest++;   
  }
  if(n % 2 && m % 2)
    ans[index++] = matrix[m / 2][n / 2];
    
  *returnSize = index;
  return ans;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值