숫자 n이 있다고 가정합니다. 하나의 Happy number인지 확인하겠습니다. 알다시피 행복한 숫자는 숫자입니다. 여기서 양의 정수로 시작하면 숫자가 해당 숫자의 제곱의 합으로 바뀝니다. 이 프로세스는 1이 될 때까지 반복됩니다. 그렇지 않으면 순환에서 끝없이 반복됩니다. 그 숫자들은 1이 찾았을 때 행복한 숫자가 될 것입니다.
따라서 입력은 19와 같으며 숫자가 행복한 숫자이므로 출력은 true가 됩니다. 19에서 볼 수 있듯이
1 2 + 9 2 =82
8 2 + 2 2 =68
6 2 + 8 2 =100
1 2 + 0 2 + 0 2 =1
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- 여기에서는 동적 프로그래밍 접근 방식을 사용하고 재귀를 사용하여 이 문제를 해결합니다.
- 기본 사례는 n =1일 때 true를 반환하는 것입니다.
- n이 이미 방문한 경우 false를 반환합니다.
- n을 방문한 것으로 표시
- n :=n을 문자열로, l :=n의 모든 숫자 목록
- temp :=모든 숫자의 제곱합
- 매개변수 temp 및 방문 목록을 사용하여 재귀적으로 함수를 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
class Solution(object): def isHappy(self, n): return self.solve(n,{}) def solve(self,n,visited): if n == 1: return True if n in visited: return False visited[n]= 1 n = str(n) l = list(n) l = list(map(int,l)) temp = 0 for i in l: temp += (i**2) return self.solve(temp,visited) ob = Solution() print(ob.isHappy(19))
입력
19
출력
True