这道题用二分的思想求解。有两个注意点:
- 输入可能为[[]],所以不能只判断[]的情况,要判断matrix[0]是否为空
- 二维矩阵的right最大为 ( l 1 ∗ l 2 − 1 ) (l1*l2-1) (l1∗l2−1),而不是 ( l 1 − 1 ) ∗ ( l 2 − 1 ) (l1-1)*(l2-1) (l1−1)∗(l2−1)
class Solution:
def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
if not matrix or not matrix[0]:
return False
l1 = len(matrix)
l2 = len(matrix[0])
left = 0
right = l1*l2-1
while left <= right:
mid = (left+right)>>1
r = mid//l2
c = mid%l2
# print(mid, r, c)
if target == matrix[r][c]:
return True
if target > matrix[r][c]:
left = mid+1
else:
right = mid-1
return False