螺旋矩阵-c语言实现

螺旋矩阵-c语言实现

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

螺旋矩阵-c语言实现_第1张图片
对于这一题,我们常规做法也很简单,设置四个循环界限,然后设置好游走即可
代码如下:

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
 


/* 54 螺旋矩阵 */
int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize){
      int m = matrixSize;
    int n = matrixColSize[0];
    
    int *returnNums = (int *)malloc(sizeof(int) * n*m );
    int f=0,b=m-1,l=0,r=n-1;
    int x=0,y=0;
    int p=0,i;
   
    *returnSize = m*n;
  

    while(p<n*m){
        if(p==0){
           returnNums[p] = matrix[0][0];
        }

        while(x<=r){
          //  returnNums[p]=matrix[y][x];
            p++;
         //   if(p>=n*m) break;
          if(p>=n*m) break;
       //printf("  p %d  x  y%d %d ",p,x,y);
           
            if(x==r){
                y=y+1;
                  returnNums[p]=matrix[y][x];
        //          printf(" y,x %d %d   p %d",y,x,returnNums[p]);
                break;
            }
            else{x=x+1;
            
              returnNums[p]=matrix[y][x];
             //  printf(" y,x %d %d   p %d",y,x,returnNums[p]);
       
        }

        }
         
        f++;
        if(f>=b&&l>=r) break;

        while(b>=y){
         //   returnNums[p]=matrix[y][x];
            p++;
              if(p>=n*m) break;
            if(y==b){
                x=x-1;
                  returnNums[p]=matrix[y][x];
              //     printf(" y,x %d %d   p %d",y,x,returnNums[p]);
                break;
            }
            else{y=y+1;
            returnNums[p]=matrix[y][x];}
         //   printf(" y,x %d %d   p %d",y,x,returnNums[p]);
              
        }
        r--;
        if(f>=b&&l>=r) break;

         while(x>=l){
           // returnNums[p]=matrix[y][x];
            p++;
              if(p>=n*m) break;
            if(x==l){
                y=y-1;
                  returnNums[p]=matrix[y][x];
          //          printf(" y,x %d %d   p %d",y,x,returnNums[p]);
                break;
            }
            else{x=x-1;
              returnNums[p]=matrix[y][x];
               //  printf(" y,x %d %d   p %d",y,x,returnNums[p]);
                 }
        }
        b--;
        printf("f  %d %d ",f,y);
         if(f>=b&&l>=r) break;
          while(y>=f){
           // returnNums[p]=matrix[y][x];
            p++;
              if(p>=n*m) break;
            if(y==f){
                x=x+1;
                  returnNums[p]=matrix[y][x];
      //              printf(" y,x %d %d   p %d",y,x,returnNums[p]);
                break;
            }
            else{y=y-1;
              returnNums[p]=matrix[y][x];
         //       printf(" y,x %d %d   p %d",y,x,returnNums[p]);
            }
        }
        l++;
        printf("%d  %d %d %d  ",f,b,l,r);
        // for(i=0;i
        //     printf("%d ",returnNums[i]);
        // }

       
       //  printf("%d ",p);
   
       if(f>=b&&l>=r) break;
      
    }

// for(i=0;i
//         printf("%d ",returnNums[i]);
//     }

return returnNums;
    
}


你可能感兴趣的:(c++与c语言,力扣刷题,c语言,算法)