
给定一个正整数 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 好了,我知道了。 |