解法一

模拟螺旋矩阵数递增的步骤,计算好沿当前方向要走的步数。

  1. class Solution {
  2. public int[][] generateMatrix(int n) {
  3. int[][] ans = new int[n][n];
  4. int l = n;
  5. int x = 0, y = -1;
  6. int num = 0;
  7. while (l > 0) {
  8. // 向右
  9. for (int i = 0; i < l; ++i) {
  10. y++;
  11. num++;
  12. ans[x][y] = num;
  13. }
  14. // 向下
  15. l--;
  16. for (int i = 0; i < l; ++i) {
  17. x++;
  18. num++;
  19. ans[x][y] = num;
  20. }
  21. // 向左
  22. for (int i = 0; i < l; ++i) {
  23. y--;
  24. num++;
  25. ans[x][y] = num;
  26. }
  27. // 向上
  28. l--;
  29. for (int i = 0; i < l; ++i) {
  30. x--;
  31. num++;
  32. ans[x][y] = num;
  33. }
  34. }
  35. return ans;
  36. }
  37. }