LeetCode54——Spiral Matrix

- 日理万妓 2022-08-09 12:56 307阅读 0赞

LeetCode54——Spiral Matrix

还是用图来表述:

SouthEast

从左上开始,按照箭头的顺序,进行4个for循环,完成一圈,一共用count = min(row,col)/2 圈。

注意最后的红色箭头,如果行数和列数中较小的数是奇数,就会出现上述情况。

这个时候咱们在最后补上就好

代码:

  1. class Solution {
  2. public:
  3. vector<int> spiralOrder(vector<vector<int>>& matrix) {
  4. vector<int> result;
  5. if(matrix.empty())
  6. return result;
  7. int m = matrix.size();//m行
  8. int n = matrix[0].size();//n列
  9. int count = min(m,n)/2;//count 圈
  10. int mod = min(m, n) % 2;
  11. for (int i = 0; i < count; i++)
  12. {
  13. for (int j = i; j < n - i - 1; j++)
  14. {
  15. result.push_back(matrix[i][j]);//从左到右
  16. }
  17. for (int j = i; j <m-1-i ; j++)
  18. {
  19. result.push_back(matrix[j][n-1-i]);//从上到下
  20. }
  21. for (int j = n-i-1; j >=i+1 ;j--)
  22. {
  23. result.push_back(matrix[m-i-1][j]);//从右到左
  24. }
  25. for (int j = m-1-i;j>=i+1;j--)
  26. {
  27. result.push_back(matrix[j][i]);//从下到上
  28. }
  29. }
  30. if (mod == 1)
  31. {
  32. if (n == m)//相当于方阵,需要在中间补上
  33. result.push_back(matrix[count][count]);
  34. else if (n > m)
  35. {
  36. for (int j = count; j < n - count; j++)
  37. result.push_back(matrix[count][j]);
  38. }
  39. else
  40. {
  41. for (int j = count;j<m-count;j++)
  42. result.push_back(matrix[j][count]);
  43. }
  44. }
  45. return result;
  46. }
  47. };

发表评论

表情:
评论列表 (有 0 条评论,307人围观)

还没有评论,来说两句吧...

相关阅读