讨论/《中级算法》 - 快乐数/
《中级算法》 - 快乐数
共 3 个回复

你说的很对

while前面要加一个set.add(n);
n要先放到set中

在推算的过程中,如果出现了计算过的数,那么肯定不是快乐数,使用set来记录算过的数,如果出现重复那么直接返回false。如果数变成1返回true。

public boolean isHappy(int n) {
         if(n == 1){
            return true;
        }
        Set<Integer> set = new HashSet<>();

        while(n != 1){
            int sum = 0;
            while(n > 0){
                int num1 = n%10;
                sum += num1 * num1;
                n = n/10;
            }
            n = sum;
            if(!set.add(n)){
                return false;
            }
        }
        return true;
    }

执行用时:1 ms, 在所有 Java 提交中击败了99.82%的用户
内存消耗:35.7 MB, 在所有 Java 提交中击败了19.27%的用户