1. 주제 설명
2. 문제 해결 아이디어 및 코드 구현
1. 문제 해결 아이디어
방법 1:
폭력 순회, 가지치기 작업을 할 수 있습니다. 순회 횟수가 목표보다 많으면 직접 중단하십시오.
방법 2:
이진 검색, 각 줄에 대한 이진 검색 수행, 파이썬에는 내장 함수 bisect가 있어 매우 편리합니다.
방법 3:
오른쪽 상단 모서리에서 왼쪽 하단 방향으로 검색 대상보다 크면 왼쪽으로 한 비트 이동 목표보다 작으면 아래로 한 비트 이동 이 검색 방법은 정렬된 경우에 적용할 수 있습니다
. 시작하려면 흐르는 물처럼 왼쪽 하단 모서리에서 시작하여 대상보다 약간 큰 방향으로 천천히 흐르도록 할 수도 있습니다.
2. 코드 구현
방법 3 코드는 다음과 같습니다(예제).
class Solution:
def findNumberIn2DArray(self, matrix: List[List[int]], target: int) -> bool:
# 从矩阵右上角开始,如果大于,就往左走,如果小于,就往下走
n, m = len(matrix), len(matrix) and len(matrix[0])
i, j = 0, m
while i<n and j:
if matrix[i][j-1]==target:
return True
elif matrix[i][j-1] > target:
j-=1
else:
i+=1
return False