🌕 202. 快乐数

吞佛童子2022年6月9日
  • algorithm
  • hash
小于 1 分钟

🌕 202. 快乐数

难度: 🌕

问题描述

img_13.png


解法

class Solution {
    public boolean isHappy(int n) {
        // 思路:
        // 通过 HashSet 记录是否走过这个数,如果走过说明已经出现循环了,
        // 既然第一次走不出去,那么之后,不论怎么走都会转圈圈
        // 并不会出现超范的问题,
        // int 最多占 32 位,一位数的平方最大为 81, 81*32 < int 范围
        HashSet<Integer> set = new HashSet<>();
        while(n != 1) {
            if(set.contains(n)) {
                return false; // 出现循环
            }
            set.add(n);
            n = mySol(n);
            // System.out.println(n);
        }
        return true;
    }

    private int mySol(int n) {
        // 求 n 各位数的平方和
        int res = 0;
        while(n != 0) {
            int cur = n % 10;
            res += cur * cur;
            n /= 10;
        }
        return res;
    }
}

输出

img_12.png

上次编辑于: 2022/6/20 下午8:24:47
贡献者: liuxianzhishou