【python】Leetcode每日一题-螺旋矩阵2
时间:2021-03-17 14:59:30
收藏:0
阅读:0
【python】Leetcode每日一题-螺旋矩阵2
【题目描述】
给你一个正整数 n
,生成一个包含 1
到 n2
所有元素,且元素按顺时针顺序螺旋排列的 n x n
正方形矩阵 matrix
。
示例1:
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
示例2:
输入:n = 1
输出:[[1]]
提示:
1 <= n <= 20
【分析】
-
思路:和螺旋矩阵1类似
首先赋值矩阵周围一圈,再赋值第二>>>圈,for循环形式递归。
-
AC代码:
class Solution(object): def generateMatrix(self, n): """ :type n: int :rtype: List[List[int]] """ matrix = [[0 for i in range(n)] for i in range(n)] index = 1 for i in range((n+1)//2): m = n - i*2 for j in range(m): matrix[i][j+i] = index index+=1 for j in range(m-1): matrix[i+1+j][n-i-1] = index index += 1 for j in range(m-1): matrix[n-i-1][n-i-2-j] = index index += 1 for j in range(m-2): matrix[n-i-j-2][i] = index index += 1 return matrix
-
讨论:
-
java版的
1ms
代码:主体思想同自己的
AC
代码,可见python
效率的确低于java
。class Solution { public int[][] generateMatrix(int n) { int[][] arr = new int[n][n]; int c = 1, j = 0; while (c <= n * n) { for (int i = j; i < n - j; i++) arr[j][i] = c++; for (int i = j + 1; i < n - j; i++) arr[i][n - j - 1] = c++; for (int i = n - j - 2; i >= j; i--) arr[n - j - 1][i] = c++; for (int i = n -j - 2; i > j; i--) arr[i][j] = c++; j++; } return arr; } }
-
官方题解:
昨天只挂了一个链接,今天总结一下。
-
模拟:
顾名思义,模拟矩阵生成过程。
-
按层模拟:
将矩阵分层,只需考虑每一层怎样处理即可。
-
链接:点这里
-
-
评论(0)