力扣题目学习59.螺旋矩阵II

问题描述:

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

      要生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵,可以使用以下算法:

  1. 初始化一个 n x n 的矩阵,填充为0或者其他占位符。
  2. 设置四个变量来表示当前要填充的边界:top, bottom, left, right。
  3. 从左上角开始,按照顺时针方向,逐层填充数字,每层填充的数字依次递增。
  4. 每填充完一层,更新边界,缩小填充范围。
  5. 重复步骤3和4,直到填充完所有的数字。

下面是一个Python函数的实现:

from typing import List

def generateMatrix(n: int) -> List[List[int]]:

    matrix = [[0] * n for _ in range(n)]

    top, bottom, left, right = 0, n - 1, 0, n - 1

    num = 1

    while True:

        if left > right:

            break

        for i in range(left, right + 1):

            matrix[top][i] = num

            num += 1

        top += 1

        if top > bottom:

            break

        for i in range(top, bottom + 1):

            matrix[i][right] = num

            num += 1

        right -= 1

        if left > right:

            break

        for i in range(right, left - 1, -1):

            matrix[bottom][i] = num

            num += 1

        bottom -= 1

        if top > bottom:

            break

        for i in range(bottom, top - 1, -1):

            matrix[i][left] = num

            num += 1

        left += 1

return matrix

这个函数会返回一个按照顺时针顺序螺旋排列的 n x n 正方形矩阵。例如,调用generateMatrix(3)会返回:

[[1, 2, 3],

 [8, 9, 4],

 [7, 6, 5]]

注释:

在Python中,[[0] * n for _ in range(n)]是一个列表推导式,用于创建一个二维列表(也就是矩阵)。这个列表推导式的工作原理如下:

  1. range(n)生成一个从0到n-1的整数序列。
  2. 对于这个序列中的每一个整数_(在这里下划线_是一个常见的占位符变量名,表示我们不关心具体的值,只是需要一个循环变量),执行[0] * n。
  3. [0] * n创建一个包含n0的一维列表
  4. 列表推导式将这些一维列表组合起来,形成一个二维列表(矩阵),其中每一行都是一个长度为n的一维列表。

        最终的结果是一个n行n列的二维列表,其中所有的元素都被初始化为0。这个二维列表可以被视为一个n x n的矩阵,用于后续的填充和操作。

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值