题解 | #奶牛快乐数#
奶牛快乐数
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。