第一题:48.旋转图像
题目链接
48. 旋转图像 - 力扣(LeetCode)
解题思路
辅助数组
首先我们分析位置关系
matrix_new[j][n - i - 1] = matrix[i][j]
如果我们使用一个辅助数组
class Solution:def rotate(self, matrix: List[List[int]]) -> None:n = len(matrix)# Python 这里不能 matrix_new = matrix 或 matrix_new = matrix[:] 因为是引用拷贝matrix_new = [[0] * n for _ in range(n)]for i in range(n):for j in range(n):matrix_new[j][n - i - 1] = matrix[i][j]# 不能写成 matrix = matrix_newmatrix[:] = matrix_new
使用翻转代替旋转
class Solution:def rotate(self, matrix: List[List[int]]) -> None:n = len(matrix)# 水平翻转for i in range(n // 2):for j in range(n):matrix[i][j], matrix[n - i - 1][j] = matrix[n - i - 1][j], matrix[i][j]# 主对角线翻转for i in range(n):for j in range(i):matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
第二题:240.搜索二维矩阵
题目链接
240. 搜索二维矩阵 II - 力扣(LeetCode)
解题思路
暴力破解
class Solution:def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:for row in matrix:for element in row:if element == target:return Truereturn False
二分查找
class Solution:def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:for row in matrix:idx = bisect.bisect_left(row, target)if idx < len(row) and row[idx] == target:return Truereturn False
idx = bisect.bisect_left(row, target)
这行代码的意思是使用二分查找算法在列表 row
中查找目标值 target
的插入位置。
具体来说,bisect.bisect_left
是Python标准库 bisect
中的一个函数,它用于在有序序列中查找目标值的插入位置。该函数返回一个索引值 idx
,表示如果将目标值插入到列表中,应该插入的位置。