自己写的递归
python
class Solution:
def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
m = len(matrix)
n = len(matrix[0])
l = m * n
def get_loca(i):
return i // n, i % n
ans = False
def bisearch(start, end):
mid = (start + end) // 2
i, j = get_loca(mid)
if start > end or i * n + j > m*n - 1:
return
if matrix[i][j] == target:
nonlocal ans
ans = True
return
if matrix[i][j] < target:
bisearch(i * n + j + 1, end)
else:
bisearch(start, i * n + j - 1)
bisearch(0, m*n-1)
return ans
用循环写比较好:
循环
python
class Solution:
def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
m = len(matrix)
n = len(matrix[0])
left, right = 0, m * n - 1
while left <= right:
mid = (left + right) // 2
i, j = mid // n, mid % n
v = matrix[i][j]
if v == target:
return True
if v > target:
right = mid - 1
else:
left = mid + 1
return False