给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
这个题目也比较简单, 和第 54 题类似: 这个题目很简单,上下左右分别用四个变量去标志:
上:top
下:bottom
左:left
右: right
就按照四步走就可以:
left -> right
top -> bottom
right -> left
bottom -> top
class Solution:
def generateMatrix(self, n):
"""
:type n: int
:rtype: List[List[int]]
"""
matrix = [[0 for j in range(n)] for i in range(n)]
top = 0
bottom = n - 1
left = 0
right = n - 1
count = 1
while (True):
for i in range(left, right + 1):
matrix[top][i] = count
count += 1
top += 1
if left > right or top > bottom:
break
for i in range(top, bottom + 1):
matrix[i][right] = count
count += 1
right -= 1
if left > right or top > bottom:
break
for j in range(left, right + 1)[::-1]:
matrix[bottom][j] = count
count += 1
bottom -= 1
if left > right or top > bottom:
break
for i in range(top, bottom + 1)[::-1]:
matrix[i][left] = count
count += 1
left += 1
if left > right or top > bottom:
break
return matrix
class Solution {
public int[][] generateMatrix(int n) {
int[][] matrix = new int[n][n];
int top = 0;
int bottom = matrix.length - 1;
int left = 0;
int right = matrix[0].length - 1;
int count = 1;
while (true) {
for (int i = left; i <= right; i++) matrix[top][i] = count++;
top++;
if (left > right || top > bottom) break;
for (int i = top; i <= bottom; i++) matrix[i][right] = count++;
right--;
if (left > right || top > bottom) break;
for (int i = right; i >= left; i--) matrix[bottom][i] = count++;
bottom--;
if (left > right || top > bottom) break;
for (int i = bottom; i >= top; i--) matrix[i][left] = count++;
left++;
if (left > right || top > bottom) break;
}
return matrix;
}
}
1
ackfin01 2018-09-04 09:22:12 +08:00
好了,我知道了。
|