Lc202_快乐数

 1package 哈希;
2
3import java.util.HashSet;
4import java.util.Set;
5
6/**
7 * 202. 快乐数
8 * 编写一个算法来判断一个数 n 是不是快乐数。
9 * <p>
10 * 「快乐数」定义为:
11 * <p>
12 * 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
13 * 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
14 * 如果 可以变为  1,那么这个数就是快乐数。
15 * 如果 n 是快乐数就返回 true ;不是,则返回 false 。
16 * <p>
17 * <p>
18 * <p>
19 * 示例 1:
20 * <p>
21 * 输入:19
22 * 输出:true
23 * 解释:
24 * 12 + 92 = 82
25 * 82 + 22 = 68
26 * 62 + 82 = 100
27 * 12 + 02 + 02 = 1
28 * 示例 2:
29 * <p>
30 * 输入:n = 2
31 * 输出:false
32 * <p>
33 * <p>
34 * 提示:
35 * <p>
36 * 1 <= n <= 231 - 1
37 */

38public class IsHappy {
39    // 取数值各个位上的单数之和
40    static int getSum(int n) {
41        int sum = 0;
42        while (n > 0) {
43            sum += (n % 10) * (n % 10);
44            n /= 10;
45        }
46        return sum;
47    }
48
49    /**
50     * 因为结果集可能重复,所以考虑hash
51     * <p>
52     * 剩下的就是判断了
53     *
54     * @param n
55     * @return
56     */

57    public static boolean isHappy(int n) {
58        Set<Integer> set = new HashSet<>();
59        while (true) {
60            int sum = getSum(n);
61            if (sum == 1) {
62                return true;
63            }
64
65            if (set.contains(sum)) {
66                return false;
67            } else {
68                set.add(sum);
69            }
70            n = sum;
71        }
72    }
73
74    public static void main(String[] args) {
75        System.out.println(isHappy(19));
76    }
77}
`
posted @ 2021-02-18 11:45  小傻孩丶儿  阅读(56)  评论(0编辑  收藏  举报