栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

剑指Offer 29.顺时针打印矩阵

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

剑指Offer 29.顺时针打印矩阵

题目描述:

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

题目分析:

以顺时针的顺序打印,那我们可以将其分成四个步骤:

1. 从左往右

2. 从上往下

3. 从右往左

4. 从下往上

因此我们可以将矩阵的四个边所在的行或列分别表示出来。

每一次打印完以后我们将其所在的行或者列进行+-1,用来缩小矩阵,来说明我们已经走过此段。

代码如下:

int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize){

     if(matrixSize==0){
         *returnSize=0;
         return NULL;
     }
     *returnSize=matrixSize*(*matrixColSize);//求出矩阵中元素个数
     int up=0,down=matrixSize-1;//四个边界
     int left=0,right=*matrixColSize-1;
     int*ret=(int*)malloc(sizeof(int)*(*returnSize));//构造数组
     int index=0;
     while(index<*returnSize){
          for(int i=left;index<*returnSize&&i<=right;i++){//从左->右
              ret[index++]=matrix[up][i];
          }
          up++; //缩小矩阵
          for(int i=up;index<*returnSize&&i<=down;i++){//从上->下
              ret[index++]=matrix[i][right];
          }
          right--;
          for(int i=right;index<*returnSize&&i>=left;i--){//从右->左
              ret[index++]=matrix[down][i];
          }
          down--;
          for(int i=down;index<*returnSize&&i>=up;i--){//从下->上
              ret[index++]=matrix[i][left];
          }
          left++;
     }
     return ret;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/875414.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号