import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param n int整型
     * @return bool布尔型
     */
    public boolean isHappy (int n) {
        // write code here
        HashSet<Integer> visited = new
        HashSet<>(); // 用于记录已经出现过的结果
        while (n != 1 && !visited.contains(n)) {
            visited.add(n); // 将当前结果加入哈希表
            n = getNextNumber(n); // 获取下一个结果
        }
        return n == 1;
    }

    public int getNextNumber(int n) {
        int sum = 0;
        while (n > 0) {
            int digit = n % 10;
            sum += digit * digit;
            n /= 10;
        }
        return sum;
    }
}

编程语言是Java。

该题考察的知识点是哈希表的使用和循环计算。

代码的简短文字解释如下:

在给定的整数n下,判断是否为快乐数。快乐数是指对于一个正整数,如果将其每个数字的平方和作为新的数字,重复这个过程,最终结果等于1,则该数字是快乐数。

首先创建HashSet集合visited,用于记录已经出现过的结果。

isHappy方法中,通过循环来判断是否为快乐数。当n不等于1且visited集合中不存在当前数字时,执行以下操作:

  • 将当前数字加入到visited集合中。
  • 调用getNextNumber方法获取下一个结果,更新n的值。

通过判断n是否等于1来确定是否为快乐数。

getNextNumber方法中,根据输入的数字n,通过循环计算每个数字的平方和。每次取末尾数字的平方并累加到sum变量中,然后将n除以10进行下一轮迭代。返回最终的平方和作为下一个结果。