LeetCode:202. 快乐数

1、题目描述

编写一个算法来判断一个数是不是“快乐数”。

一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。

示例: 

输入: 19
输出: true
解释: 
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

2、题解

2.1、解法一

class Solution(object):
    count = 0
    def isHappy(self, n):
        """
        :type n: int
        :rtype: bool
        """
        if n == 1:
            return True
        l = []
        while n:
            a,b = divmod(n,10)
            l.append(b)
            n = a
        # if len(l) ==1:
        #     return False
        # else:
        self.count += 1

        if self.count >100:
            return False
        l.reverse()
        print(l)
        ret = 0
        for i in l:
            ret += i**2
        if ret == 1:
            return True
        else:
            ret = self.isHappy(ret)
        return ret

2.2、解法二

class Solution(object):
    def isHappy(self, n):
        """
        :type n: int
        :rtype: bool
        """

        temp = []

        def get_add(n):
            ret = 0
            while n != 0:
                g = n % 10
                ret += g ** 2
                n = int(n / 10)
            return ret

        while True:
            n = get_add(n)

            if n == 1:
                return True
            elif n in temp:
                return False
            else:
                temp.append(n)

  

原文地址:https://www.cnblogs.com/bad-robot/p/10065685.html