评论中给的:不是快乐数的数称为不快乐数(unhappy number),所有不快乐数的数位平方和计算,最後都会进入 4 → 16 → 37 → 58 → 89 → 145 → 42 → 20 → 4 的循环中。
class Solution {
public boolean isHappy(int n) {
while (n != 1 && n != 4) {
int sum = 0;
while (n > 0) {
sum += (n % 10) * (n % 10);
n /= 10;
}
n = sum;
}
return n == 1;
}
}
自己的想法:把出现过的数,存入set中,判断是否再次出现了,出现了就return false;
public boolean isHappy(int n) {
if (n == 1)
return true;
Set<Integer> set = new HashSet<Integer>();
int m = 0;
while (m != 1) {
while (n > 0) {
int i = n % 10;
m = m + i * i;
n = n / 10;
}
if (m == 1) {
return true;
} else {
if(set.contains(m))
return false;
set.add(m);
n = m;
m = 0;
}
}
return true;
}
当然,别人的比较快。