LeetCode 59. Spiral Matrix II (Java版; Medium)

朱雀 2023-07-03 06:06 203阅读 0赞

welcome to my blog

LeetCode Top Interview Questions 59. Spiral Matrix II (Java版; Medium)

题目描述

  1. Given a positive integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
  2. Example:
  3. Input: 3
  4. Output:
  5. [
  6. [ 1, 2, 3 ],
  7. [ 8, 9, 4 ],
  8. [ 7, 6, 5 ]
  9. ]

第一次做; 和剑指29题的顺时针打印很像, 核心: 1)确定圈数, 2)确定每圈打印的起点及剩余三个顶点的坐标

  1. /* 核心: 模拟螺旋的过程; 确定好打印几圈? 每一圈的打印起点? */
  2. class Solution {
  3. public int[][] generateMatrix(int n) {
  4. int[][] arr = new int[n][n];
  5. //打印几圈
  6. int loops = (n+1)/2;
  7. int num = 1;
  8. for(int i=0; i<loops; i++){
  9. //每一圈打印的起点(i,i)
  10. //左到右; i-0 = n-1-y -> y=n-1-i
  11. for(int col=i; col<=n-1-i; col++){
  12. arr[i][col] = num++;
  13. }
  14. //上到下, 上开下闭; i-0=n-1-ROW -> ROW=n-1-i
  15. for(int row=i+1; row<=n-1-i; row++){
  16. arr[row][n-1-i] = num++;
  17. }
  18. //右到左, 右开左闭; n-1-col = COL-0 -> COL=i
  19. for(int col=n-1-i-1; col>=i; col--){
  20. //n-1-row = i-0
  21. arr[n-1-i][col] = num++;
  22. }
  23. //下到上, 下开上开; n-1-row=i-0 -> row=n-1-i
  24. for(int row=n-1-i-1 ; row>i; row--){
  25. arr[row][i] = num++;
  26. }
  27. }
  28. return arr;
  29. }
  30. }

力扣优秀题解

format_png

  1. class Solution {
  2. public int[][] generateMatrix(int n) {
  3. int l = 0, r = n - 1, t = 0, b = n - 1;
  4. int[][] mat = new int[n][n];
  5. int num = 1, tar = n * n;
  6. while(num <= tar){
  7. for(int i = l; i <= r; i++) mat[t][i] = num++; // left to right.
  8. t++;
  9. for(int i = t; i <= b; i++) mat[i][r] = num++; // top to bottom.
  10. r--;
  11. for(int i = r; i >= l; i--) mat[b][i] = num++; // right to left.
  12. b--;
  13. for(int i = b; i >= t; i--) mat[i][l] = num++; // bottom to top.
  14. l++;
  15. }
  16. return mat;
  17. }
  18. }

发表评论

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

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

相关阅读