LeetCode 59. Spiral Matrix II
原题链接在这里:https://leetcode.com/problems/spiral-matrix-ii/
题目:
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 ] ]
题解:
从外圈到内圈螺旋着填数,如果n是奇数的话,最后正中间的数需要单独填写.
Time Complexity: O(n^2).
Space: O(1), regardless res.
AC Java:
1 class Solution { 2 public int[][] generateMatrix(int n) { 3 int [][] res = new int[n][n]; 4 int num = 1; 5 int x = 0; 6 int y = 0; 7 8 //由外到内,旋转加值 9 while(n>1){ 10 for(int j = 0; j<n-1; j++){ 11 res[x][y++] = num++; 12 } 13 14 for(int i = 0; i<n-1; i++){ 15 res[x++][y] = num++; 16 } 17 18 for(int j = 0; j<n-1; j++){ 19 res[x][y--] = num++; 20 } 21 22 for(int i = 0; i<n-1; i++){ 23 res[x--][y] = num++; 24 } 25 26 n-=2; 27 x++; 28 y++; 29 } 30 31 if(n%2 == 1){ 32 res[x][y] = num; 33 } 34 35 return res; 36 } 37 }
Time Complexity: O(n ^ 2).
Space: O(1), regardless res.
AC Java:
1 class Solution { 2 public int[][] generateMatrix(int n) { 3 int [][] res = new int[n][n]; 4 if(n < 1){ 5 return res; 6 } 7 8 int count = 1; 9 int r1 = 0; 10 int r2 = n - 1; 11 int c1 = 0; 12 int c2 = n - 1; 13 while(r1 <= r2 && c1 <= c2){ 14 for(int c = c1; c <= c2; c++){ 15 res[r1][c] = count++; 16 } 17 18 for(int r = r1 + 1; r <= r2; r++){ 19 res[r][c2] = count++; 20 } 21 22 if(r1 < r2 && c1 < c2){ 23 for(int c = c2 - 1; c >= c1; c--){ 24 res[r2][c] = count++; 25 } 26 27 for(int r = r2 - 1; r > r1; r--){ 28 res[r][c1] = count++; 29 } 30 } 31 32 r1++; 33 r2--; 34 c1++; 35 c2--; 36 } 37 38 return res; 39 } 40 }