返回
LeetCode 202. 快乐数:从 1 到无穷,寻觅快乐
前端
2023-10-10 14:49:09
在数学中,快乐数是一个会不断重复的数,直到最终归于 1。这个过程是这样进行的:从给定的正整数开始,平方它的每一位数字,然后将这些平方的和作为新的数字。如果结果是 1,那么原始数字就是快乐数;如果结果不是 1,则重复这个过程,直到得到 1 或进入无限循环。
比如,19 是一个快乐数,因为:
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1
再比如,2 是一个非快乐数,因为它永远不会归于 1:
2^2 = 4
4^2 = 16
1^2 + 6^2 = 37
3^2 + 7^2 = 58
5^2 + 8^2 = 89
...
在这个 LeetCode 202 题中,我们的任务是判断一个给定的正整数是否是快乐数。我们可以使用一个循环来实现这一算法:
- 初始化一个变量
num
为给定的正整数。 - 进入一个
while
循环,循环条件是num
不等于 1。 - 在循环中,计算
num
的平方和sum
。 - 将
num
更新为sum
。 - 如果
num
等于 1,则它是一个快乐数,否则它不是快乐数。
public class Solution {
public boolean isHappy(int n) {
Set<Integer> seen = new HashSet<>();
while (n != 1 && !seen.contains(n)) {
seen.add(n);
n = getSumOfSquares(n);
}
return n == 1;
}
private int getSumOfSquares(int n) {
int sum = 0;
while (n > 0) {
int digit = n % 10;
sum += digit * digit;
n /= 10;
}
return sum;
}
}