0202-Easy-HappyNumber-快乐数
Problems
CN
输入:19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1EN
解法
解法一:用 HashSet 检测循环
最后更新于
输入:19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1最后更新于
Input: 19
Output: true
Explanation:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1class Solution {
// 计算整数 n 各位置的平方和
private int getNext(int n) {
int totalSum = 0;
while (n > 0) {
// 数位分离,不断除以 10 取余
int d = n % 10;
n = n / 10;
totalSum += d * d;
}
return totalSum;
}
public boolean isHappy(int n) {
// 通过集合存储已经出现过的数字
Set<Integer> seen = new HashSet<>();
// 如果 n 不唯一的情况,集合中还未出现数字,就将该数字加入集合中,否则就跳出循环
while (n != 1 && !seen.contains(n)) {
seen.add(n);
// 下一个数字赋值给 n
n = getNext(n);
}
// 判断跳出循环后,n 是否为 1,如果不为 1,表示集合中出现了可以进入无限循环的数字
return n == 1;
}
}