# coding:utf-8 """ Name : LeetCode202.py Author : qlb Contect : 17801044486@163.com Time : 2021/2/5 10:49 Desc: 快乐数 """ #「当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法了。」 用set #解题思路:根据题意可知,在整个过程中,数字会变为1 或者进入无限循环两种情况。变为1 则返回True 进入循环则返回False。 # 那么如何判断是否进入循环呢?很简单,把每次的求和结果保存起来,求和完之后查看当前的值是否以前出现过,如果出现过, #证明进入循环了 返回False 否则就继续更新求和 如果出现1 返回True class Solution: def isHappy(self, n: int) -> bool: if n <= 0: return False else: resNum = self.compuHappy(n) return resNum #求一个整数各个位数的数字平方和 两种方法 def getSum1(self,n): sum = 0 n = str(n) for i in n: i = int(i) sum += i ** 2 return sum def getSum2(self,n): sum = 0 while n != 0: num = n % 10 #求出末位数 也就是个位数 sum += num**2 n = n // 10 #去掉末尾数 也就是去掉各位数 一轮一轮地把各位数取出来 return sum def compuHappy(self,n): tmp = set() while True: sum = self.getSum2(n) if sum in tmp: return False n = sum tmp.add(n) if n == 1: return True test = Solution() res = test.isHappy(10) print (res)