leetcode之spiral matrix

leetcode每天刷题很有用是怎么回事呢?leetcode相信大家都很熟悉,但是leetcode每天刷题很有用是怎么回事呢,下面就让小编带大家一起了解吧。

leetcode每天刷题很有用,其实就是每天刷一道力扣题目提高脱发速度,大家可能会很惊讶leetcode怎么会每天刷题很有用呢?但事实就是这样,小编也感到非常惊讶。这就是关于leetcode每天刷题很有用的事情了,大家有什么想法呢,欢迎在评论区告诉小编一起讨论哦!

今天我们先从leetcode之spiral matrix开始吧!摩根士丹利的校招中也考到了这题哦!

题目如下图!别看是英文其实很好理解就是把一个矩阵顺时针打印出来~~~~~

审题并不难~

审题很快~

下面小编就开始做了哦~~~

第一步:想想想思路~整体思路就跟随审题思路了,怎么打印矩阵,我们的指针就怎么走~~(这里有张小编找的图,很全的思路了~~~)

第二步:写写写代码~~~

小编选择了C语言~~~

首先leetcode贴心的给出了变量~

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

}

分别是一个整形变量的指针的指针int** matrix,一个变量存矩阵行 int matrixSize,一个指针存矩阵列,一个指针存返回大小~

下面开始写啦,看看这些变量如何运用呢!小编也非常好奇!

第一种情况一定要考虑啦!!! 是不是根本没有矩阵要输出呢(矩阵大小为0)??

  if (matrix == NULL || matrixSize == 0 || *matrixColSize == 0) {        

*returnSize = 0;          

return NULL;}

接着如果矩阵有大小,必须要先计算出矩阵的大小哦!!!

 int total = matrixSize * (* matrixColSize);

 int index = 0;  

 int *order = (int *)malloc(sizeof(int) * total);

然后就开始顺时针打印了~~~

int left = 0,right = (*matrixColSize) - 1,top = 0,bottom = matrixSize - 1;

先定下四个角落~~~非常关键哦!

while (left

      for (int column = left; column

              order[index++] = matrix[top][column];

          }

      for (int row = top + 1; row

          order[index++] = matrix[row][right];

      }

      if (left < right && top < bottom) {

          for (int column = right - 1; column > left; column--) {

              order[index++] = matrix[bottom][column];

          }

          for (int row = bottom; row > top; row--) {

              order[index++] = matrix[row][left];

          }

      }

          left++;

          right--;

          top++;

          bottom--;

      }

      *returnSize = total;

      return order;

}

打印的过程就是把相应的值存入一维数组order喽!!!

听小编讲完有没有觉得非常有趣呢!

这今天就是关于leetcode每天刷题很有用的事情了,大家有什么想法呢,欢迎在评论区告诉小编一起讨论哦!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200605A0S46700?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券