nums라는 숫자 목록이 있다고 가정하고 a^2 + b^2 =c^2와 같은 세 개의 숫자, b, c가 있는지 확인해야 합니다.
따라서 입력이 [10, 2, 8, 5, 6]과 같으면 출력은 8^2 + 6^2 =64+36 =100 =10^2와 같이 True가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- tmp :=모든 숫자의 제곱을 내림차순으로 나열한 목록
- tmp의 각 인덱스 i와 해당 숫자 n에 대해 다음을 수행합니다.
- 기본:=n
- 왼쪽 :=i+1, 오른쪽 :=tmp의 크기 -1
- 왼쪽 <=오른쪽, do
- t :=두 개의 목록 tmp[left] 및 tmp[right] 결합
- t가 base와 같으면
- 참 반환
- 그렇지 않으면 t> 밑이면
- 왼쪽 :=왼쪽 + 1
- 그렇지 않으면
- 오른쪽 :=오른쪽 - 1
- 거짓을 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
class Solution: def solve(self, nums): tmp = sorted([n*n for n in nums], reverse = True) for i, n in enumerate(tmp): base = n left = i+1; right = len(tmp)-1 while left <= right: t = tmp[left]+tmp[right] if t == base: return True elif t > base: left += 1 else: right -= 1 return False ob = Solution() print(ob.solve([10, 2, 8, 5, 6]))
입력
[10, 2, 8, 5, 6]
출력
True