题解 | #奶牛快乐数#
奶牛快乐数
https://www.nowcoder.com/practice/d91cec70c7724a7dbcea02ed25bdeaee?tpId=354&tqId=10589470&ru=/exam/oj&qru=/ta/interview-202-top/question-ranking&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D354
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型
* @return bool布尔型
*/
public boolean isHappy (int n) {
// write code here
Set<Integer> seenNumbers = new HashSet<>();
while (n != 1 && !seenNumbers.contains(n)) {
seenNumbers.add(n);
n = getNextNumber(n);
}
return n == 1;
}
private int getNextNumber(int n) {
int sum = 0;
while (n > 0) {
int digit = n % 10;
sum += digit * digit;
n /= 10;
}
return sum;
}
}
知识点:
- 循环:通过 while 循环来重复进行数字转换,直到得到 1 或者陷入循环。
- 哈希集合(HashSet):用于存储已经出现过的数字,以便检测是否陷入循环。
- 数字操作:通过取余操作和除法操作来获取每个位数上的数字,然后计算平方和。
解题思路:
使用一个哈希集合来存储已经出现过的数字,以便检测是否陷入循环。我们使用一个循环来进行数字转换,通过不断计算每个位数上的数字的平方和。如果最终得到数字 1,则返回 true,否则返回 false。
