Leetcode面试经典150题-202.快乐数

题目比较简单,重点是理解思想

解法都在代码里,不懂就留言或者私信

面试的时候可以用我提交的解法,这个更优

java 复制代码
class Solution {
    /**第一种-常规解法,主要的思想是如果出现了循环或者等于1,计算过程就停止
    如果等于1,说明是快乐术,否则就是出现了循环 */
    public boolean isHappy2(int n) {
        if(n == 1) {
            return true;
        }
        /**我们用一个HashSet保存曾经出现过的数 */
        Set<Integer> set = new HashSet<>();
        int sum = n;
        while(sum != 1 && !set.contains(sum)) {
            /**注意这一句要放在最前面,因为下面sum马上要改变了,如果不放第一个,有可能初始sum会被忽略 */
            set.add(sum);
            /**记录当前数所有位的平方和 */
            int curSum = 0;
            /**取每一位的平方相加 */
            while(sum != 0) {
                int curNum = sum % 10;
                curSum += curNum * curNum;
                sum = sum / 10;
            }
            /**赋值给sum进行之后的计算 */
            sum = curSum;
        }
        /**如果等于1退出的说明是快乐数,如果不是就是因为重复退出的,不是快乐数 */
        return sum == 1;
    }

    /**第二种-找规律贪心,列举出一堆数后你会发现,只要sum不出现4就不会死循环,出现了1
    就可以结束,我们就可以把循环条件变成sum != 1&& sum !=4
    这个解法就不用set来记录了 */
    public boolean isHappy(int n) {
        if(n == 1) {
            return true;
        }
        /**我们用一个HashSet保存曾经出现过的数 */
        int sum = n;
        while(sum != 1 && sum != 4) {
            /**记录当前数所有位的平方和 */
            int curSum = 0;
            /**取每一位的平方相加 */
            while(sum != 0) {
                int curNum = sum % 10;
                curSum += curNum * curNum;
                sum = sum / 10;
            }
            /**赋值给sum进行之后的计算 */
            sum = curSum;
        }
        /**如果等于1退出的说明是快乐数,如果不是就是因为重复退出的,不是快乐数 */
        return sum == 1;
    }
}
相关推荐
小O的算法实验室10 小时前
2026年KBS,流形感知强化学习差分进化算法+不规则3D无人机路径规划,深度解析+性能实测
算法·智能算法·智能算法改进
玖釉-10 小时前
C++ 中的循环语句详解:while、do...while、for、嵌套循环与循环控制
开发语言·c++·算法
不做无法实现的梦~10 小时前
运动控制系统复习一览-----常考题目总结版本
算法
小短腿的代码世界10 小时前
信号路由风暴:Qt算法交易系统的高频信号分发架构
qt·算法·架构
阿文的代码库11 小时前
一文读懂GROUP BY 1,2 VS GROUP BY column_1, column_2 的区别
算法
ricardo197311 小时前
# Tree Shaking 深度解析:为什么你的代码没被摇掉?
前端·面试
小江的记录本11 小时前
【Java基础】反射与注解:核心原理、自定义注解、注解解析方式(附《思维导图》+《面试高频考点清单》)
java·数据结构·python·mysql·spring·面试·maven
008爬虫实战录11 小时前
【码上爬】 题十:魔改算法 堆栈分析,找加密值过程详解
前端·python·算法
chao18984411 小时前
基于狮蚁群算法(ALO)的火电机组功能调度实现
人工智能·算法
Deep-w11 小时前
【MATLAB】含光伏 - 储能的家庭/工业微电网能量管理仿真研究
开发语言·算法·matlab