59. 螺旋矩阵 II

    xiaoxiao2025-01-15  14

    给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。

    示例:

    输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ] class Solution: def generateMatrix(self, n: int) -> 'List[List[int]]': if n == 0: return [] matrix = [[0] * n for i in range(n)] up = 0 down = n-1 left = 0 right = n-1 num = 1 while up <= down and left <= right: # 上 j = left while j <= right: matrix[up][j] = num j += 1 num += 1 up += 1 if up > down: break # 右 i = up while i <= down: matrix[i][right] = num i += 1 num += 1 right -= 1 if left > right: break # 下 j = right while j >= left: matrix[down][j] = num j -= 1 num += 1 down -= 1 if up > down: break # 左 i = down while i >= up: matrix[i][left] = num i -= 1 num += 1 left += 1 if left > right: break return matrix def generateMatrix2(self, n: int) -> 'List[List[int]]': matrix = [[0 for i in range(n)] for j in range(n)] i, j, di, dj = 0, 0, 0, 1 for value in range(n * n): matrix[i][j] = value + 1 if matrix[(i + di) % len(matrix)][(j + dj) % len(matrix[0])] != 0: di, dj = dj, -di i += di j += dj return matrix def generateMatrix3(self, n: int) -> List[List[int]]: ans = [[n ** 2]] t_len = n ** 2 while t_len > n: temp = [list(i) for i in zip(*ans[::-1])] ans = [[i for i in range(t_len - len(temp[0]), t_len)]] + temp t_len -= len(temp[0]) return ans if __name__=='__main__': s =Solution() n = 4 m = s.generateMatrix2(n) for i in range(n): print(m[i])

     

    最新回复(0)