여기서 우리는 숫자 n이 하나의 행복한 숫자인지 아닌지를 감지하는 방법을 볼 것입니다. 따라서 행복한 숫자는 숫자입니다. 여기서 양의 정수로 시작하면 숫자가 해당 숫자의 제곱의 합으로 바뀝니다. 이 프로세스는 1이 될 때까지 반복됩니다. 그렇지 않으면 순환에서 끝없이 반복됩니다. 그 숫자들은 1이 찾았을 때 행복한 숫자가 될 것입니다.
숫자가 19라고 가정하면 숫자가 행복한 숫자이므로 출력이 참이 됩니다. 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): """ :type n: int :rtype: bool """ 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) ob1 = Solution() op = ob1.isHappy(19) print("Is Happy:",op)
입력
19
출력
Is Happy: True