领扣快乐数 利用集合set 实现
快乐数
要求
编写一个算法来判断一个数是不是“快乐数”。
一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。
__示例: __
输入: 19
输出: true
解释:
1^2 + 9 ^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1
思路1
1.首先我们要得到一个循环 来循环我们每次分解之后的数的和total
2.判断出现的数之前有没有出现过,出现过就会产生循环,就不是快乐数。可以用集合 set 来记录之前出现的数字。
3.每次循环完后total要将其置为0,不然又会在原有的基础之上加 ,n的数为新一轮要分解的数(重点)
4.停止条件就是n=1的时候
代码片
def isHappy(self, n):
"""
:type n: int
:rtype: bool
"""
ss = set()
while True:
if n == 1:
return True
total = 0
while n:
total += (n % 10) **2
n = n // 10
if total in ss:
return False
ss.add(total)
n = total
思路二
大佬代码
代码片
def isHappy(self, n):
"""
:type n: int
:rtype: bool
"""
s = set()
while n > 1 and n not in s:
s.add(n)
sum = 0
while n != 0:
t = n%10
sum += t*t
n = n//10
n = sum
return n == 1