快乐数(Happy Number)是一个数学概念,
其定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程,直到这个数变为1,
也可能是无限循环但始终变不到1。如果这个过程结果为1,那么这个数就是快乐数。
public static boolean isHappy(int n) {
HashSet<Integer> seenNumbers = new HashSet<>();
// 两种情况: n最终变成1; n无限循环
while (n != 1 && !seenNumbers.contains(n)) {
seenNumbers.add(n); // 记录n的过程, 以判断是否循环
int sum = 0;
while (n > 0) {
int digit = n % 10;
sum += digit * digit;
n /= 10;
}
n = sum;
}
return n == 1;
}