解题要点:

通过列举可发现规律:所有不快乐数的数位平方和计算,最终都会进入 4 → 16 → 37 → 58 → 89 → 145 → 42 → 20 → 4 → ··· 的循环中。

所以只要某轮转换结果sum为以上8个数字中的任意一个数字,都会进入循环,即可判断该数不是快乐数。

代码实现:

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param n int整型
     * @return bool布尔型
     */
    public boolean happynum (int n) {
        while (true) {
            int sum = 0;
            //计算本轮转换的结果
            while (n != 0) {
                int temp = n % 10;
                sum += temp * temp;
                n /= 10;
            }
            //是快乐数
            if (sum == 1) {
                return true;
            }
            //不是快乐数
            else if (sum == 4 || sum == 16 || sum == 37 || sum == 58 || sum == 89 ||
                     sum == 145 || sum == 42 || sum == 20) {
                return false;
            }
            //尚且无法判断,继续下一轮转换
            else {
                n = sum;
            }
        }
    }
}