leetcode刷题(python)——(四)

01.02.03 练习题目(第 04 天)

1. 0048. 旋转图像

1.1 题目大意

描述:给定一个 n × n n \times n n×n 大小的二维矩阵(代表图像) m a t r i x matrix matrix

要求:将二维矩阵 m a t r i x matrix matrix 顺时针旋转 90°。

说明

  • 不能使用额外的数组空间。
  • n = = m a t r i x . l e n g t h = = m a t r i x [ i ] . l e n g t h n == matrix.length == matrix[i].length n==matrix.length==matrix[i].length
  • 1 ≤ n ≤ 20 1 \le n \le 20 1n20
  • − 1000 ≤ m a t r i x [ i ] [ j ] ≤ 1000 -1000 \le matrix[i][j] \le 1000 1000matrix[i][j]1000

示例

  • 示例 1:

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[[7,4,1],[8,5,2],[9,6,3]]
  • 示例 2:

解题思路:

我们可以发现轮转后的数组是把原来的四个数组按照下标重新组成了新的四个数组,按照下下标重新组成数组,我们不难想到zip()函数。而后我们发现15 13 2 5的顺序变成了倒序,我们可以选择在新数组中变成倒叙,或者在zip之前将四个数组重新排列

我的题解

class Solution(object):def rotate(self, matrix):""":type matrix: List[List[int]]:rtype: None Do not return anything, modify matrix in-place instead.""" matrix[:]= list(zip(*matrix[::-1]))# 只需一行,python的优雅
输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]
输出:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]

2. 0054. 螺旋矩阵

2.1 题目大意

描述:给定一个 m × n m \times n m×n 大小的二维矩阵 m a t r i x matrix matrix

要求:按照顺时针旋转的顺序,返回矩阵中的所有元素。

说明

  • m = = m a t r i x . l e n g t h m == matrix.length m==matrix.length
  • n = = m a t r i x [ i ] . l e n g t h n == matrix[i].length n==matrix[i].length
  • 1 ≤ m , n ≤ 10 1 \le m, n \le 10 1m,n10
  • − 100 ≤ m a t r i x [ i ] [ j ] ≤ 100 -100 \le matrix[i][j] \le 100 100matrix[i][j]100

示例

  • 示例 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]

解题思路:

在该题中我们可以借鉴上一题的思路,因为我们要获得这些元素的顺序,可以不断的进行旋转。所以就是弹出list[0],然后进行旋转,再弹直至列表为空

我的题解

class Solution(object):def spiralOrder(self, matrix):""":type matrix: List[List[int]]:rtype: List[int]"""res = []while(matrix):res += matrix.pop(0)matrix[:] = list(zip(*matrix[:]))[::-1]return res

3. 0498. 对角线遍历

3.1 题目大意

描述:给定一个大小为 m × n m \times n m×n 的矩阵 m a t mat mat

要求:以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素。

说明

  • m = = m a t . l e n g t h m == mat.length m==mat.length
  • n = = m a t [ i ] . l e n g t h n == mat[i].length n==mat[i].length
  • 1 ≤ m , n ≤ 1 0 4 1 \le m, n \le 10^4 1m,n104
  • 1 ≤ m × n ≤ 1 0 4 1 \le m \times n \le 10^4 1m×n104
  • − 1 0 5 ≤ m a t [ i ] [ j ] ≤ 1 0 5 -10^5 \le mat[i][j] \le 10^5 105mat[i][j]105

示例

  • 示例 1:

输入:mat = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,4,7,5,3,6,8,9]
  • 示例 2:
输入:mat = [[1,2],[3,4]]
输出:[1,2,3,4]

解题思路:

在该题中我们可以先尝试举几个例子,发现一些规律。
比如:

  1. 遍历的次数n = x(行数) + y(列数) - 1
  2. 遍历时满足(x == y时): s u m ( x i , y i ) = n sum(x_i,y_i) = n sum(xi,yi)=n
  3. 当n为偶数到边界时, y i + 1 y_i + 1 yi+1;n为奇数时, x i + 1 x_i + 1 xi+1
    需要提到的是第二条的条件,当 x != y 时,我们需要控制边界我们要取 m i n ( x i , n ) 和 m i n ( y i , n ) min(x_i, n)和min(y_i, n) min(xi,n)min(yi,n)

同时,在实现过程中当m != n 时也会出现超出下边界的问题,所以也需要用到max()

我的题解

class Solution(object):def findDiagonalOrder(self, mat):""":type mat: List[List[int]]:rtype: List[int]"""res = []m, n, times = len(mat) ,len(mat[0]) ,len(mat) + len(mat[0]) - 1for i in range(times):if  i % 2:for k in range(max(0, i - n + 1), min(i + 1, m)): res.append(mat[k][i - k])else:for k in range(min(m - 1, i), max(-1, i - n), -1): res.append(mat[k][i - k])            return res

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/630482.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为手机无法弹出wifi上网认证页面处理

华为手机无法弹出wifi上网认证页面 连wifi后跳到上图界面卡住,不跳转到单位的上网认证界面。 打开手机的设置应用,点击上面的WLAN选项。 点击上面的更多WLAN设置选项。 关闭WLAN安全检测就可以正常弹出上网认证界面, 正常弹出上网认证界面&a…

OpenGL:图元

OpenGL的图元 点 GL_POINTS: 将顶点绘制成单个的点 线 GL_LINES:将顶点用于创建线段,2个点成为一条单独的线段。如果顶点个数是奇数,则忽略最后一个。 顶点:v0, v1, v2, v3, … , vn,线段:…

# 从浅入深 学习 SpringCloud 微服务架构(一)基础知识

从浅入深 学习 SpringCloud 微服务架构(一)基础知识 1、系统架构演变: 1)单体应用架构。如电商项目。 用户管理、商品管理、订单管理,在一个模块里。 优点:开发简单,快速,适用于…

ASCII 码值表

字符ASCII码值048149250351452553654755856957 大写字母A-Z对应的ASCII码值:65-90 小写字母a-z对应的ASCII码值:97-122 小写字母-32大写字母 ch-32;//将ch小写->大写 以上是常用的关系,不用死记忆,对照表格,可以方便理解编程。 将字符…

NAND数据恢复的方案

NAND Flash是固态硬盘(SSD)的核心数据存储。然而,NAND Flash因其物理特性和工作原理,存在一定的内在脆弱性,尤其是在数据存储的长期可靠性方面。 比特错误是指在读取NAND Flash时,原本存储的二进制位&#…

20232937文兆宇 2023-2024-2 《网络攻防实践》实践六报告

20232937文兆宇 2023-2024-2 《网络攻防实践》实践六报告 1.实践内容 (1)动手实践Metasploit windows attacker 任务:使用metasploit软件进行windows远程渗透统计实验 具体任务内容:使用windows Attacker/BT4攻击机尝试对wind…

JDK8、JDK11、JDK17和JDK21这几个版本更新的主要特性

文章目录 1.JDK82.JDK113.JDK174,JDK21 1.JDK8 JDK8是Java的一个重大更新版本,引入了一系列新特性和改进,主要包括: Lambda表达式:Lambda表达式允许我们以简洁、函数式的方式编写代码,使代码更易于理解和维护。-Stream…

WordPress的全面解析:为什么它是创建博客和网站的首选

在当前的数字化时代,无论是个人博客还是企业网站,都需要一个强大而灵活的平台以支撑其内容和用户交互。WordPress作为全球最流行的内容管理系统(CMS),以其强大的功能、灵活的定制性和广泛的用户基础,成为了…

状态压缩DP题单

P1433 吃奶酪&#xff08;最短路&#xff09; dp(i, s) 表示从 i 出发经过的点的记录为 s 的路线距离最小值 #include<bits/stdc.h> #define int long long using namespace std; const int N 20; signed main() { int n; cin >> n;vector<double>x(n 1),…

储能逆变器测试负载箱基础认识

储能逆变器测试负载箱是专门用于测试储能逆变器的设备&#xff0c;它能够模拟真实的负载情况&#xff0c;对储能逆变器进行全面的性能测试。这种设备在新能源领域&#xff0c;特别是太阳能和风能领域有着广泛的应用。 储能逆变器将储存的电能转换为交流电&#xff0c;然后输出给…

Leetcode算法训练日记 | day27

一、组合总和 1.题目 Leetcode&#xff1a;第 39 题 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 c…

java 红黑树

01.红黑树的定义&#xff1a; 每一个结点有五个属性&#xff1a;