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