小白试水——leetcode腾讯题库-59.螺旋矩阵 II(Python解答)

  • 题目59:螺旋矩阵 II
    • 思路1:螺旋矩阵
    • 学习代码:旋转(卷蛋卷)

题目59:螺旋矩阵 II

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

示例:

输入: 3

输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]

思路1:螺旋矩阵

  1. 给定一个包含 n x n 个元素的矩阵(n 行, n 列),
  2. 按照顺时针螺旋顺序,访问矩阵中的每一个元素,并替换为 1~ n 2 n^2 n2 的数。
class Solution(object):
    def generateMatrix(self, n):
        """
        :type n: int
        :rtype: List[List[int]]
        """
        if not n:
            return
        matrix = [[0]*n for _ in range(n)]
        u_i = 0
        d_i = n-1
        l_j = 0
        r_j = n-1
        j = 1
        while u_i <= d_i and l_j <= r_j:
            # 从左到右
            for i in range(l_j,r_j+1):
                matrix[u_i][i] = j
                j += 1
            u_i += 1
            # 从上到下
            for i in range(u_i,d_i+1):
                matrix[i][r_j] = j
                j += 1
            r_j -= 1
            # 从右到左
            for i in range(r_j,l_j-1,-1):
                matrix[d_i][i] = j
                j += 1
            d_i -= 1
            # 从下到上
            for i in range(d_i,u_i-1,-1):
                matrix[i][l_j] = j
                j += 1
            l_j += 1
        return matrix

小白试水——leetcode腾讯题库-59.螺旋矩阵 II(Python解答)_第1张图片
主要思想:

被深深的伤害

这里注意初始化数组的方法, 不能[[None]*n]*n这样相当于复制了引用,如果只有一个元素,返回[[1]], 否者奇数和偶数计算可以进行几个螺旋,每次螺旋进行一次循环,这样可以循环记录的四个边的数据

学习代码:旋转(卷蛋卷)

流程图
在这里插入图片描述

class Solution:
    def generateMatrix(self, n):
        r, n = [[n**2]], n**2
        while n > 1: n, r = n - len(r), [[*range(n - len(r), n)]] + [*zip(*r[::-1])]
        return [list(i) for i in r]

你可能感兴趣的:(Python题库)