LeetCode 202. Happy Number [Easy]

题目来源:https://leetcode.com/problems/happy-number

题目难度:Easy

解答1[Java]:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
public boolean isHappy(int n) {
Set<Integer> exist = new HashSet<>();
while (n > 1) {
if (exist.contains(n)) {
return false;
}
exist.add(n);
n = Square(n);
}
return n == 1;
}

private int Square(int n) {
int res = 0;
while (n > 0) {
res += (n % 10) * (n % 10);
n /= 10;
}
return res;
}
}

思路

使用一个 Set,如果 Set 已经包含了当前元素,说明发生循环了。就返回 false。

解答2[Java]:神奇的解法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public boolean isHappy(int n) {
int d;
while (n > 9) {
d = n;
n = 0;
while (d > 0) {
n += Math.pow(d % 10, 2);
d = d / 10;
}
}
return n == 1 || n == 7;
}
}

思路

这个是 1ms 的 sample submission。

最后使用了一个 1 和 7 来进行判断是因为如果是 Happy Number 就一定会经过 7 吗?不知道这背后的数学规律。