4月10日算法总结

给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。

你必须在**原地** 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。

示例 1:

class Solution:

def rotate(self, matrix: List[List[int]]) -> None:

先将矩阵转置

for i in range(len(matrix)) :

for j in range(i+1,len(matrix)) : 只处理上三角矩阵,即列从行+1开始

matrix[i][j],matrix[j][i] = matrix[j][i],matrix[i][j] 交换对应位置

for i in range(len(matrix)) :

matrix[i].reverse() 将每一行反转

编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零

class Solution:

def setZeroes(self, matrix: List[List[int]]) -> None:

m,n = len(matrix),len(matrix[0])

先做需要删除的行和列的标记

zero_row = [False]*m 行标记

zero_col = [False]*n 列标记

for i in range(m) :

for j in range(n) : 遍历矩阵

if matrix[i][j] == 0 : 如果有一个数为0

zero_row[i] = True 则该行需要清0 ,将标记记为true

zero_col[j] = True 则该列需要清0 ,将标记记为true

for i in range(m) :

for j in range(n) : 遍历矩阵

if zero_row[i] or zero_col[j] : 如果存在标记

matrix[i][j] = 0 这一行和列都重置为0

给你一个大小为 m x n 的矩阵 mat ,请以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素。

示例 1:

class Solution:

def findDiagonalOrder(self, mat: List[List[int]]) -> List[int]:

m,n = len(mat),len(mat[0])

duijiaoxian = {} 设置对角线的字典

result = [] 设置结果列表

for i in range (m) : 遍历矩阵

for j in range(n) :

if i + j not in duijiaoxian : 如果该对角线不存在

duijiaoxian[i+j] = [] 建立对角线的值为空列表

duijiaoxian[i+j].append(mat[i][j]) 在相应的对角线加入元素

for d in range(m+n-1) : 遍历对角线,矩阵的对角线数量是行加列-1

if d % 2 == 0 : 如果是偶数,需要反向收集

result.extend(duijiaoxian[d][::-1]) extend是将元素一个个收集,::-1 为反转这个列表

else :

result.extend(duijiaoxian[d])

return result

相关推荐
alphaTao2 小时前
LeetCode 每日一题 2026/4/6-2026/4/12
python·算法·leetcode
李日灐2 小时前
【优选算法3】二分查找经典算法面试题
开发语言·c++·后端·算法·面试·二分查找·双指针
独孤--蝴蝶2 小时前
leetcode-动态规划三种问题的异同点
算法·leetcode·动态规划
迷你可可小生2 小时前
二叉树知识点
python·算法
Z1Jxxx2 小时前
C++ P1151 子数整数
开发语言·c++·算法
迷你可可小生2 小时前
图像视觉面经学习(一)
图像处理·人工智能·python·学习
foundbug9992 小时前
基于种群分解与主元分析的NSGA-II优化算法
算法
计算机安禾2 小时前
【数据结构与算法】第37篇:图论(一):图的存储结构(邻接矩阵与邻接表)
数据结构·算法·链表·排序算法·深度优先·图论·visual studio code
sparEE2 小时前
基础排序算法:冒泡、选择、插入、希尔
数据结构·算法·排序算法