leetcode202.题目描述
编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。
如果 n 是快乐数就返回 True ;不是,则返回 False 。

解题思路:今天的leetcode上的每日一题推荐的是简单题,真不是我偷懒,每天写得都是推荐的题。
不多说,这题的思路很简单,主要实现两个功能,以上面的示例为例,第一个功能是实现82到68,这个非常简单就不多说了,具体看代码里的int2num函数,实现的就是这个功能;第二个怎么判断无限循环,永远没办法到1,如果循环肯定在内部是有个环的,如下图所示(盗用leetcode上一张图),我们只需要用一个额外的set,把之前的数都保存下来,得到一个新的数后,判断这个数在不在集合里,如果不在,并add到set中继续往下走,直到1为止;如果在set里,可以停止搜索,返回-1了,说明会无线循环下去。
代码如下:
class Solution:
def isHappy(self, n: int) -> bool:
l = set()#set保存之前的数
while n!=1:
l.add(n)
n = self.int2num(n)
if n in l:
return False
return True
#实现向前转换函数
def int2num(self,n):
str_n = str(n)[::-1]
res = 0
for i in str_n:
res += int(i)**2
return res
