Spiral Matrix II
Total Accepted: 9622 Total Submissions: 31755 My Submissions
Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
For example,
Given n =
You should return the following matrix:
和 Spiral Matrix一样,思路参考 【LeetCode】Spiral Matrix,但是这次不是打印矩阵的内容了,而是赋值,思路仍然一致。
1、设定边界值,startx,endx,starty,endy。
2、左到右,上到下,右到左,下到上,直到while条件结束。
Total Accepted: 9622 Total Submissions: 31755 My Submissions
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 ] ]【解题思路】
和 Spiral Matrix一样,思路参考 【LeetCode】Spiral Matrix,但是这次不是打印矩阵的内容了,而是赋值,思路仍然一致。
1、设定边界值,startx,endx,starty,endy。
2、左到右,上到下,右到左,下到上,直到while条件结束。
Java AC 348MS
public class Solution {
public int[][] generateMatrix(int n) {
int [][]matrix = new int[n][n];
int startx = 0;
int starty = 0;
int endx = n - 1;
int endy = n - 1;
int num = 1;
while (startx <= endx && starty <= endy) {
for (int i = starty; i <= endy; i++) {
matrix[startx][i] = num;
num++;
}
for (int i = startx+1; i <= endx; i++) {
matrix[i][endy] = num;
num++;
}
if (startx != endx) {
for (int i = endy-1; i >= starty; i--) {
matrix[endx][i] = num;
num++;
}
}
if (starty != endy) {
for (int i = endx-1; i > startx; i--) {
matrix[i][starty] = num;
num++;
}
}
startx++;
endx--;
starty++;
endy--;
}
return matrix;
}
}
Python AC 208ms
class Solution:
# @return a list of lists of integer
def generateMatrix(self, n):
matrix = [[0 for col in range(n)] for row in range(n)]
startx = 0
starty = 0
endx = n - 1
endy = n - 1
num = 1
while startx <= endx and starty <= endy:
for i in range(starty, endy + 1):
matrix[startx][i] = num
num += 1
for i in range(startx + 1, endx + 1):
matrix[i][endy] = num
num += 1
if startx != endx:
for i in range(endy - 1, starty - 1, -1):
matrix[endx][i] = num
num += 1
if starty != endy:
for i in range(endx - 1, startx, -1):
matrix[i][starty] = num
num += 1
startx += 1
endx -= 1
starty += 1
endy -= 1
return matrix