返回

LeetCode 202. 快乐数:从 1 到无穷,寻觅快乐

前端

在数学中,快乐数是一个会不断重复的数,直到最终归于 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 题中,我们的任务是判断一个给定的正整数是否是快乐数。我们可以使用一个循环来实现这一算法:

  1. 初始化一个变量 num 为给定的正整数。
  2. 进入一个 while 循环,循环条件是 num 不等于 1。
  3. 在循环中,计算 num 的平方和 sum
  4. num 更新为 sum
  5. 如果 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;
    }
}