题目
给定一个正整数 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
python
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复制代码
java
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; }}复制代码