Задача на нахождение счастливого числа
Есть такая задача
Я решил, но только наполовину, то есть мне нужно как-то рекурсивно запускать for чтобы он продолжал суммировать квадраты цифр пока не упрется в условие что сумма равна 1, но он только один раз делает и все, поэтому не работает как нужно. Подскажите как это реализовать. Спасибо.
class Solution(object):
def isHappy(self, n):
store = set()
sum = 0
n = str(n)
while n > 1:
for digit in n:
digit = int(digit)
sum += pow(digit,2)
if sum in store:
return isHappy(n)
else:
return
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
Не обязательно использовать рекурсию, можно в цикле заменять n на полученную сумму. Для выявления цикла используем множество.
Accepted на leetcode:
class Solution:
def isHappy(self, n: int) -> bool:
store = set()
while n > 1:
sm = 0
sn = n
while sn:
digit = sn % 10
sm +=digit * digit
sn //= 10
if sm in store:
return False
elif sm > 1:
store.add(sm)
n = sm
return True
>>> 12 False
>>> 13 True
Вот с рекурсией, Accepted
class Solution:
def isHappy(self, n: int) -> bool:
store = set()
def ish(n: int) -> bool:
sm = 0
sn = str(n)
for digit in sn:
digit = int(digit)
sm += digit * digit
if sm == 1:
return True
if sm in store:
return False
else:
store.add(sm)
return ish(sm)
return ish(n)