写点什么

每日一题——leecode59( 螺旋矩阵 II)

作者:武师叔
  • 2022 年 6 月 09 日
  • 本文字数:1092 字

    阅读完需:约 4 分钟

每日一题——leecode59( 螺旋矩阵 II)

难度:中等 (看清楚不是简单,别再说老子水文啊~)

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

示例 1:

输入:n = 3

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

示例 2:

输入:n = 1

输出:[[1]]

思路:

一道模拟题,难度中等,面试出现频率极高。

模拟题就是本身不涉及算法,就是单纯根据题目所描述的模拟整个过程从而得到最后的结果。

这类题天然的考察你的码力,即对编程语言的掌握能力,一不小心就会各种 bug。

做这类模拟题的要点就是多在纸上画一下,别空想把自己想晕了,代码写干净些,方面后面 debug...

这道题是按“顺时针”顺序对矩阵进行填充,方向无非就是“上下左右”,顺时针的话,填充就是按照“上->右->下->左”,写具体点就是:

上:从左到右填充。

右:从上到下填充。

下:从右到左填充。

左:从下到上填充。

同时找好每次填充的边界,比如最开始的时候最左侧边界 left = 0,最右侧边界 right = n-1,最上侧边界 up = 0,最下侧边界 down = n-1。

构造这里我讲解一下:(因为我刚开始也没理解)

这里给大家一个建议,没看明白解析,就去分开跑一下,不就清晰了还有要不耻下问哦!


代码实现:

round()方法返回浮点数 x 的四舍五入值。

class Solution:     def generateMatrix(self, n: int) -> List[List[int]]:        # 初始化要填充的正方形        matrix = [[0] * n for _ in range(n)]         left, right, up, down = 0, n - 1, 0, n - 1        number = 1  # 要填充的数字         while left < right and up < down:             # 从左到右填充上边            for x in range(left, right):                matrix[up][x] = number                number += 1             # 从上到下填充右边            for y in range(up, down):                matrix[y][right] = number                number += 1             # 从右到左填充下边            for x in range(right, left, -1):                matrix[down][x] = number                number += 1             # 从下到上填充左边            for y in range(down, up, -1):                matrix[y][left] = number                number += 1             # 缩小要填充的范围            left += 1            right -= 1            up += 1            down -= 1         # 如果阶数为奇数,额外填充一次中心        if n % 2:            matrix[round(n // 2)][round(n // 2)] = number            #round()  方法返回浮点数x的四舍五入值。         return matrix
复制代码


发布于: 刚刚阅读数: 3
用户头像

武师叔

关注

每天丰富自己,去过自己想要的生活! 2022.04.28 加入

一个喜欢最新技术,研发的人工智能专业的大二学生,用自己的代码做一些有意义的事情! 目前大二结束有去大厂研发岗实习的计划,每天丰富自己的技术,去过自己想要的实习生活。

评论

发布
暂无评论
每日一题——leecode59( 螺旋矩阵 II)_6月月更_武师叔_InfoQ写作社区