我是靠谱客的博主 飞快硬币,最近开发中收集的这篇文章主要介绍(Week 8)Python-Leetcode:Spiral Matrix, Spiral Matrix II,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

54. Spiral Matrix

给定m*n矩阵,以螺旋式的顺序返回矩阵中的所有元素

Example 1:
Input:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
Output: [1,2,3,6,9,8,7,4,5]
Example 2:
Input:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
Output: [1,2,3,4,8,12,11,10,9,5,6,7]
解题思路

  由题意,可将问题视为选择不同起点,并依次绕矩阵顺时针旋转一周,如Example 1中需绕两周,起点分别为1和5,其中5所绕的圈只有其本身。显然需确定绕圈的圈数、每次绕圈的边界即可。

  绕圈圈数: c=(min(m,n)+1)//2 c = ( m i n ( m , n ) + 1 ) / / 2

  绕圈起点: (k,k)while0<=k<c ( k , k ) w h i l e 0 <= k < c

  绕圈边界:根据起点与m、n的关系确定

程序代码
class Solution:
def spiralOrder(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: List[int]
"""
res = []
if len(matrix) == 0 or len(matrix[0]) == 0:
return res
n, m = len(matrix), len(matrix[0])
c = min(n, m)
#确定圈数
for i in range(0, (c + 1) // 2):
#append the ith circle
res += matrix[i][i: m - i]
#左到右
for j in range(i + 1, n - i):
#上到下
res.append(matrix[j][m - i - 1])
if n - i - 1 != i:
#判断是否与左到右重复
for j in range(m - i - 2, i - 1, -1):
#右到左
res.append(matrix[n - i - 1][j])
if m - i - 1 != i:
#判断是否与上到下重复
for j in range(n - i - 2, i, -1):
#下到上
res.append(matrix[j][i])
return res

59. Spiral Matrix II

给定一个整数n,生成一个方阵,其元素为 [1,n2] [ 1 , n 2 ] 的数字以螺旋式填充至方阵中

Example 1
Input: 3
Output:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
解题思路

  在Spiral Matrix的基础上,增加一个count变量,每次走到一个位置,将count赋值给对应位置并自增即可。

程序代码
class Solution:
def generateMatrix(self, n):
"""
:type n: int
:rtype: List[List[int]]
"""
if n == 0:
return []
row = [0 for i in range(0, n)]
res = [row[:] for i in range(0, n)]
count = 0
#生成方阵及count变量
for i in range(0, (n + 1) // 2):
#依次循环每一圈
#append the ith circle
for j in range(i, n - i):
#左到右
count += 1
res[i][j] = count
for j in range(i + 1, n - i):
#上到下
count += 1
res[j][n - i - 1] = count
if n - i - 1 != i:
#判断是否与左到右、上到下重复
for j in range(n - i - 2, i - 1, -1):
#右到左
count += 1
res[n - i - 1][j] = count
for j in range(n - i - 2, i, -1):
#下到上
count += 1
res[j][i] = count
return res

最后

以上就是飞快硬币为你收集整理的(Week 8)Python-Leetcode:Spiral Matrix, Spiral Matrix II的全部内容,希望文章能够帮你解决(Week 8)Python-Leetcode:Spiral Matrix, Spiral Matrix II所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部