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

相关推荐
学涯乐码堂主1 小时前
有趣的“打擂台算法”
c++·算法·青少年编程·gesp
Tutankaaa2 小时前
知识竞赛题库设计全攻略
人工智能·算法
WolfGang0073212 小时前
代码随想录算法训练营 Day50 | 图论 part08
数据结构·算法·图论
www_comsci3 小时前
【生物EI会议】2026年计算机技术与生物医学国际学术会议(CTBS 2026)
图像处理·神经网络·计算机视觉
aini_lovee4 小时前
多目标粒子群优化(MOPSO)双适应度函数MATLAB实现
人工智能·算法·matlab
yong99904 小时前
图像融合与拼接:完整MATLAB工具箱
算法·计算机视觉·matlab
春风不语5054 小时前
深入理解主成分分析(PCA)
算法
apollowing4 小时前
启发式算法WebApp实验室:从搜索策略到群体智能的能力进阶(二十二)
算法·启发式算法·web app
晚枫歌F4 小时前
最小堆定时器
数据结构·算法
Lumos_7775 小时前
Linux -- 线程
java·jvm·算法