leetcode 59. Spiral Matrix II 螺旋方式写矩阵

﹏ヽ暗。殇╰゛Y 2022-06-09 10:55 301阅读 0赞

Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.

For example,
Given n = 3,

You should return the following matrix:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]

和上一道题leetcode 54. Spiral Matrix 螺旋方式读取矩阵相反的是,本题要求的是按照螺旋的方式写矩阵,实现方法一模一样。

代码如下:

  1. public class Solution
  2. {
  3. public int[][] generateMatrix(int n)
  4. {
  5. if(n==0)
  6. return new int[0][0];
  7. int [][]matrix=new int[n][n];
  8. int count=1;
  9. int top=0,bottom=matrix.length-1;
  10. int left=0,right=matrix[0].length-1;
  11. while(true)
  12. {
  13. for(int i=left;i<=right;i++)
  14. matrix[top][i]=count++;
  15. top++;
  16. if(top>bottom)
  17. break;
  18. for(int i=top;i<=bottom;i++)
  19. matrix[i][right]=count++;
  20. right--;
  21. if(left>right)
  22. break;
  23. for(int i=right;i>=left;i--)
  24. matrix[bottom][i]=count++;
  25. bottom--;
  26. if(top>bottom)
  27. break;
  28. for(int i=bottom;i>=top;i--)
  29. matrix[i][left]=count++;
  30. left++;
  31. if(left>right)
  32. break;
  33. }
  34. return matrix;
  35. }
  36. }

下面是C++的做法,这个和上一道题螺旋方式读取矩阵的做法一模一样

代码如下:

  1. #include <iostream>
  2. #include <vector>
  3. #include <map>
  4. #include <unordered_map>
  5. #include <set>
  6. #include <unordered_set>
  7. #include <queue>
  8. #include <stack>
  9. #include <string>
  10. #include <climits>
  11. #include <algorithm>
  12. #include <sstream>
  13. #include <functional>
  14. #include <bitset>
  15. #include <numeric>
  16. #include <cmath>
  17. #include <regex>
  18. using namespace std;
  19. class Solution
  20. {
  21. public:
  22. vector<vector<int>> generateMatrix(int n)
  23. {
  24. vector<vector<int>> mat(n,vector<int>(n,0));
  25. if (n <= 0)
  26. return mat;
  27. int count = 1 , left = 0, right = mat[0].size() - 1;
  28. int up = 0, down = mat.size() - 1;
  29. while (true)
  30. {
  31. for (int i = left; i <= right; i++)
  32. mat[up][i] = count++;
  33. up++;
  34. if (up > down)
  35. break;
  36. for (int i = up; i <= down; i++)
  37. mat[i][right] = count++;
  38. right--;
  39. if (left > right)
  40. break;
  41. for (int i = right; i >= left; i--)
  42. mat[down][i] = count++;
  43. down--;
  44. if (up > down)
  45. break;
  46. for (int i = down; i >= up; i--)
  47. mat[i][left] = count++;
  48. left++;
  49. if (left > right)
  50. break;
  51. }
  52. return mat;
  53. }
  54. };

发表评论

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

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

相关阅读