题解 | #奶牛快乐数#
奶牛快乐数
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进行重复循环判断 HashSet<Integer> set = new HashSet<>(); // sum表示每次生成的数字 int sum = 0; int single; while (true) { // single表示每一个位数 single = n % 10; // 新生成的数字 sum += single * single; n = n / 10; // 如果n==0 表示,新数字已经完成生成 if (n == 0) { // n重新被赋值,将新数字赋值给n n = sum; // 如果sum==1表示已经找到快乐数 if (sum == 1) { return true; } // 如果hashSet已经包含了sum表示已经出现重复的循环,直接返回false即可 if (set.contains(sum)) { return false; } // 将每次生成的新数字加入到hashSet中,用来判断是否已经出现重复循环。 set.add(sum); // sum重新赋值为0 sum = 0; } } } }
知识点:
1.哈希去重
2.数字取余和整除,如何取出个位,十位,等等
解题分析:
1.怎么对数字进行取出每一个位数上的数字,这个简单,取余+整除
2.怎么判断是否出现无限循环,也不难,用hashSet判断是否已经出现重复的数字
3.如果出现直接返回false,表示不可能是快乐数就可以了
编程语言:
Java