- 这个方法虽然能过,但太笨了,就不解释了。T^T
class Solution:
def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
row = len(matrix)
col = len(matrix[0])
if target < matrix[0][0] or target > matrix[row-1][col-1]:
return False
# minlen = min(row, col)
# 先往一行一行搜
for i in range(row):
# 如果这一行的最大值小于target,就直接下一轮
if target == matrix[i][col-1]: return True
elif target < matrix[i][col-1]: # 先找到能向下搜索的行
for j in range(col): # 一列一列的搜
if target == matrix[i][j]:return True
elif target < matrix[i][j]: # 找到前一个数< target<后一个数的间隙
if j == 0: return False
for k in range(i, row): # 搜索这一列以下的值
if target == matrix[k][j-1]:
return True
return False
- Z字搜索
class Solution:
def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
row = len(matrix)
col = len(matrix[0])
if target < matrix[0][0] or target > matrix[row-1][col-1]:
return False
x, y = 0, col-1
# 从右上角开始
while x < row and y >= 0:
if target == matrix[x][y]:
return True # 正好左上角相等
elif target < matrix[x][y] : # <matrix[x+1][y]、matrix[x+2][y]就是小于左上角所在一列的所有元素,可以排除掉
y -= 1
else: # target > matrix[x][y] > matrix[x][y-1]、matrix[x][y-2]就是大于左上角所在一行的所有元素,可以排除掉
x += 1
return False
参考官方解析