心路历程:
这道题很容易被二分搜索给迷惑,但是仔细看会发现这道题从矩阵的右上角或者左下角来看的话这是一个二分搜索树。
以右上角为例,每个元素的右子树都比它大,左子树都比它小,并且这个顺序可以迭代。因此这个问题变成了从根节点就开始递归搜索的问题。由于值已经按照二维数组给出了,所以只需要控制数组的索引变化来遍历树即可。
注意的点:
1、while循环的判断条件可以用是否在边界内
解法:二叉搜索树建模+双指针
python
class Solution:
def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
n, m = len(matrix), len(matrix[0])
i, j = 0, m-1
last_value = matrix[i][j]
while 0 <= i < n and 0 <= j < m:
if matrix[i][j] == target: return True
elif matrix[i][j] > target: j -= 1
elif matrix[i][j] < target: i += 1 # 为了便于阅读没用else
return False