LeetCode202欢乐数

# 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)
原文地址:https://www.cnblogs.com/cnugis/p/14377910.html