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}
不恋尘世浮华,不写红尘纷扰