欢迎访问原文所在博客:https://52heartz.top/articles/leetcode-202-happy-number/
解答1[Java]:
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]:神奇的解法
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 吗?不知道这背后的数学规律。