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

相关推荐
星越华夏7 小时前
计算机视觉:YOLOv12安装环境
人工智能·yolo·计算机视觉
吃好睡好便好9 小时前
在Matlab中绘制横直方图
开发语言·学习·算法·matlab
仰泳之鹅9 小时前
【C语言】自定义数据类型2——联合体与枚举
c语言·开发语言·算法
x_yeyue11 小时前
三角形数
笔记·算法·数论·组合数学
念何架构之路12 小时前
Go语言加密算法
数据结构·算法·哈希算法
AI科技星12 小时前
《数学公理体系·第三部·数术几何》(2026 年版)
c语言·开发语言·线性代数·算法·矩阵·量子计算·agi
失去的青春---夕阳下的奔跑12 小时前
560. 和为 K 的子数组
数据结构·算法·leetcode
黎阳之光13 小时前
黎阳之光:以视频孪生重构智慧医院信息化,打造高标项目核心竞争力
大数据·人工智能·物联网·算法·数字孪生
丷丩13 小时前
三级缓存下MVT地图瓦片服务性能优化策略
算法·缓存·性能优化·gis·geoai-up
Terrence Shen14 小时前
大模型部署工具对比
人工智能·深度学习·计算机视觉