【python】Leetcode每日一题-螺旋矩阵
Leetcode每日一题-螺旋矩阵
【题目描述】
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
示例1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
示例2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]
提示:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 10
-100 <= matrixi <= 100
【分析】
思路:
首先打印矩阵周围一圈,再对矩阵进行切片,成为一个新的矩阵,再对新矩阵进行打印,有点递归的感觉。
切片代码:
matrix = [matrix_[c:m_-c][i][c:n_-c] for i in range(m_-c*2)]
AC代码:
class Solution(object):
def spiralOrder(self, matrix_):
"""
:type matrix: List[List[int]]
:rtype: List[int]
"""
output = []
m_ = len(matrix_)
n_ = len(matrix_[0])
cycle = m_ if m_ < n_ else n_
for c in range((cycle+1)//2):
matrix = [matrix_[c:m_-c][i][c:n_-c] for i in range(m_-c*2)]
#print(matrix)
n = len(matrix[0])
m = len(matrix)
for i in range(n):
output.append(matrix[0][i])
for i in range(m-1):
output.append(matrix[i+1][n-1])
for i in range(n-1):
if(m-1==0):
break
output.append(matrix[m-1][n-i-2])
for i in range(m-2):
if(n-1==0):
break
output.append(matrix[m-i-2][0])
return output
讨论:
java版的
0ms
代码:class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> ans = new ArrayList<>();
int[] pos = { 0, 0 };
// 上 右 下 左
int[] ract = { 0, matrix[0].length - 1, matrix.length - 1, 0, };
// d = 0,1,2,3时 分别代表往右、往下、往左、往上
int d = 0;
while (ans.size() < matrix.length * matrix[0].length) {
ans.add(matrix[pos[0]][pos[1]]);
if (d == 0 && pos[1] < ract[1]){
pos[1] ++;
continue;
}
if (d == 0 && pos[1] == ract[1]){
pos[0] ++;
ract[d] ++;
d = (d + 1) % 4 ;
continue;
}
if (d == 1 && pos[0] < ract[2]){
pos[0] ++;
continue;
}
if (d == 1 && pos[0] == ract[2]){
pos[1] --;
ract[d] --;
d = (d + 1) % 4 ;
continue;
}
if (d == 2 && pos[1] > ract[3]){
pos[1] --;
continue;
}
if (d == 2 && pos[1] == ract[3]){
pos[0] --;
ract[d] --;
d = (d + 1) % 4 ;
continue;
}
if (d == 3 && pos[0] > ract[0]){
pos[0] --;
continue;
}
if (d == 3 && pos[0] == ract[0]){
pos[1] ++;
ract[d] ++;
d = (d + 1) % 4 ;
continue;
}
}
return ans;
}
}
螺旋向量的转移方程:
di, dj = 0, 1
di, dj = dj, -di
取自点赞量最高的讨论
官方题解: 戳这里
【python】Leetcode每日一题-螺旋矩阵的更多相关文章
- 【python】Leetcode每日一题-螺旋矩阵2
[python]Leetcode每日一题-螺旋矩阵2 [题目描述] 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix . ...
- 【python】Leetcode每日一题-矩阵置零
[python]Leetcode每日一题-矩阵置零 [题目描述] 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 .请使用 原地 算法. 进阶: 一个直观的解 ...
- 【python】Leetcode每日一题-寻找旋转排序数组中的最小元素
[python]Leetcode每日一题-寻找旋转排序数组中的最小元素 [题目描述] 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组.例如,原数组nums ...
- 【python】Leetcode每日一题-删除有序数组中的重复项
[python]Leetcode每日一题-删除有序数组中的重复项 [题目描述] 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现一次 ,返回删除后数组的新长度. 不要 ...
- 【python】Leetcode每日一题-存在重复元素3
[python]Leetcode每日一题-存在重复元素3 [题目描述] 给你一个整数数组 nums 和两个整数 k 和 t .请你判断是否存在 两个不同下标 i 和 j,使得 abs(nums[i] ...
- 【python】Leetcode每日一题-扰乱字符串
[python]Leetcode每日一题-扰乱字符串 [题目描述] 使用下面描述的算法可以扰乱字符串 s 得到字符串 t : 如果字符串的长度为 1 ,算法停止 如果字符串的长度 > 1 ,执行 ...
- 【python】Leetcode每日一题-前缀树(Trie)
[python]Leetcode每日一题-前缀树(Trie) [题目描述] Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的 ...
- 【python】Leetcode每日一题-打家劫舍2
[python]Leetcode每日一题-打家劫舍2 [题目描述] 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金.这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋 ...
- 【python】Leetcode每日一题-二叉搜索树节点最小距离
[python]Leetcode每日一题-二叉搜索树节点最小距离 [题目描述] 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 . 示例1: 输入:root = [4 ...
随机推荐
- [WC2014]时空穿梭
这才叫莫比乌斯反演题. 一.题目 点此看题 二.解法 也没有什么好的思路,我们不妨把暴力柿子写出来,我们想枚举直线,但是这道题不能枚举直线的斜率,所以就要用整数来表示直线,我们不妨枚举出发点和终止点的 ...
- 开源项目renren-fast-vue开发环境部署(前端部分)
开源项目renren-fast-vue开发环境部署(前端部分) 说明:renren-fast是一个开源的基于springboot的前后端分离手脚架,当前版本是3.0 开发文档需要付费,官方的开发环境部 ...
- golang 微服务以及相关web框架
golang 中国gocn golang Applicable to all database connection pools xorm是一个简单而强大的Go语言ORM库,通过它可以使数据库操作非常 ...
- 【odoo14】第二十一章、性能优化
通过odoo框架,我们可以开发大型且复杂的应用.良好的性能是实现这一目标的基础.本章,我们将探讨如何提高应用性能.同时,我们也会讲解找出影响性能的因素. 本章包含以下内容: 记录集的预读取模式 将数据 ...
- springboot源码解析-管中窥豹系列之bean如何生成?(十四)
一.前言 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot ...
- SSM-员工管理项目实战-CRUD-增删改查
SSM-CRUD 一.项目简介 主界面演示 功能点 分页 数据校验 ajax Rest 风格的 URI 技术点 基础框架 - ssm(Spring + SpringMVC + MyBatis) 数据库 ...
- Redis实战篇(四)基于GEO实现查找附近的人功能
如果现在要开发一个功能: 要为一款交友App实现查找附近的人,并按距离进行排序. 让你来开发这个功能,你会如何实现? MySQL 不合适 你可能想到,把用户用户的经纬度坐标使用MySQL等关系数据库( ...
- linux日志文件说明
/var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一 /var/log/secure 与安全相关的日志信息 /var/log/maillog 与 ...
- Go Protobuf(比xml小3-10倍, 快20-100倍)
简介 Protocol Buffers是什么? protocol buffers 是一种灵活,高效,自动化机制的结构数据序列化方法-可类比 XML,但是比 XML 更小.更快.更为简单.你可以定义数据 ...
- [Fundamental of Power Electronics]-PART I-3.稳态等效电路建模,损耗和效率-3.4 如何获得模型的输入端口
3.4 如何获得模型的输入端口 Fig 3.16 Buck converter example 让我们尝试使用3.3.3节的步骤来推导图3.16所示的Buck变换器的模型.电感绕组电阻同样由串联电阻\ ...