不是快乐数的数称为不快乐数(unhappy number)

这个题首先要知道,所有不快乐数的数位平方和计算, 最後都会进入:

4 → 16 → 37 → 58 → 89 → 145 → 42 → 20 → 4 的循环中。

在十进位下,个位数的快乐数只有1和7.

(100以内的快乐数有 :1, 7, 10, 13, 19, 23, 28, 31, 32, 44, 49, 68, 70, 79, 82, 86, 91, 94, 97, 100。)

这里我们简单判断一下十以内的即可(个位数是不是1或7)。

所以只需要写一个专门用来做转换过程的函数, 然后循环去转换,直到这个数是个位数的时候,判断是不是1或7就行了。

c++实现

class Solution {
public:
    int happy(int t){
        int res=0;
        while(t){
            res += (t%10)*(t%10);
            t /= 10;
        }
        return res;
    }
    bool happynum(int n) {
        // write code here
        while(n>9){
            n = happy(n);
        }
        return n==1;
    }
};

python实现

class Solution:
    def happy(self, t: int):
        res = 0
        while t:
            res += ((t%10) * (t%10))
            t //= 10
        return res
        
    def happynum(self , n: int) -> bool:
        # write code here
        while n>9:
            n = self.happy(n)
        return n==1 or n==7