题解 | #奶牛快乐数# java

奶牛快乐数

https://www.nowcoder.com/practice/d91cec70c7724a7dbcea02ed25bdeaee

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 = getDigitSquareSum(n);
        }
        return n == 1;
    }

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

Java编写的。

该题考察的知识点包括:

  • 循环和条件判断:使用循环来迭代计算每个位数上的数字的平方和,以及判断是否出现循环或者结果为1。
  • HashSet :记录已经出现过的数字,以便检测是否出现了循环。

代码的文字解释如下:

  1. getDigitSquareSum计算一个数的每个位数上的数字的平方和。通过循环将输入的整数 n 除以10依次取得每个位数上的数字,计算平方并累加到 sum 变量中,然后更新 n 的值为 n 除以10的商。最后返回计算得到的平方和。
  2. isHappy 方法接受一个整数 n,判断编号为 n 的奶牛是否为快乐奶牛。使用 HashSet visited 来记录已经出现过的数字。通过循环,直到 n 的值变为1或者出现循环为止。在每次循环迭代中,先检查 visited 是否已经包含当前值 n,如果包含则表示出现了循环,跳出循环。否则,将 n 添加到 visited 中,并通过调用辅助函数 getDigitSquareSum 将 n 替换为它的每个位数上的数字的平方和。最后,判断循环结束后的 n 是否为1,如果是则表示这个奶牛是快乐奶牛,返回 true。否则,表示出现了无限循环,返回 false。
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务