题解 | #奶牛快乐数#

奶牛快乐数

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

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务