力扣: 快乐数

文章目录

需求

编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」 定义为:

对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。

然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。

如果这个过程 结果为 1,那么这个数就是快乐数。

如果 n 是 快乐数 就返回 true ;不是,则返回 false 。
示例 1:

输入:n = 19

输出:true

解释:

12 + 92 = 82

82 + 22 = 68

62 + 82 = 100

12 + 02 + 02 = 1
示例 2:

输入:n = 2

输出:false
提示:

1 <= n <= 231 - 1

分析

取该数字的每一位上的数字,平方后求和。

将得到的结果作为新的数字,重复上述步骤。

如果最终结果是1,则该数字是快乐数字;如果出现了循环(即进入了一个已经出现过的数字),则该数字不是快乐数字。

代码

java 复制代码
public boolean isHappy(int n) {
    Set<Integer> set = new HashSet();
    while( true ){
        n = getSum(n);
        if( n == 1 ){
            return true;
        }
        if( !set.add(n) ){
            return false;
        }
    }
}

private int getSum(int n){
    int sum = 0;
    while( n > 0 ){
        int temp = n % 10;
        sum += temp * temp;
        n = n / 10;
    }
    return sum;
}

代码解释:

这是主方法,接收一个整数 n,判断它是否为快乐数字。
Set<Integer> set = new HashSet();

创建一个 HashSet 用于存储已经出现过的数字。这个集合帮助我们检测是否进入了循环。

无限循环,直到找到结果(是快乐数字还是进入循环)。
n = getSum(n);

调用 getSum 方法计算 n 的每一位的平方和,并将结果赋值给 n。
if (n == 1) { return true; }

如果计算结果为1,则返回 true,说明 n 是一个快乐数字。
if (!set.add(n)) { return false; }

尝试将 n 添加到 set 中。如果添加失败(即 set 中已经存在这个数字),说明 n 进入了循环,返回 false,说明 n 不是快乐数字。

结束 while 循环。

辅助方法getSum:

这是一个私有方法,用于计算数字 n 各位数字的平方和。
int sum = 0;

初始化 sum 为0,用于累加每一位数字的平方和。
while (n > 0) {

只要 n 大于0,就继续计算。
int temp = n % 10;

取 n 的最后一位数字。
sum += temp * temp;

将该位数字的平方累加到 sum 中。
n = n / 10;

去掉 n 的最后一位数字。

结束 while 循环。
return sum;

返回计算得到的平方和。

运行结果:

结尾

以上 是我对这道算法的一些遐想和延伸, 可能不是最优解, 但是算法的优化嘛 本身就是一个思索的过程, 能在这个思索和迭代的过程中有所收获和乐趣就是在成长了, 欢迎大家一起来交流更多的解答...

相关推荐
艾莉丝努力练剑13 分钟前
【优选算法必刷100题】第031~32题(前缀和算法):连续数组、矩阵区域和
大数据·人工智能·线性代数·算法·矩阵·二维前缀和
醉颜凉15 分钟前
环形房屋如何 “安全劫舍”?动态规划解题逻辑与技巧
c语言·算法·动态规划
大雨淅淅18 分钟前
一文搞懂动态规划:从入门到精通
算法·动态规划
不去幼儿园20 分钟前
【启发式算法】灰狼优化算法(Grey Wolf Optimizer, GWO)详细介绍(Python)
人工智能·python·算法·机器学习·启发式算法
培风图南以星河揽胜20 分钟前
Java实习模拟面试|离散数学|概率论|金融英语|数据库实战|职业规划|期末冲刺|今日本科计科要闻速递:技术分享与学习指南
java·面试·概率论
能鈺CMS21 分钟前
能鈺CMS · 虚拟发货源码
java·大数据·数据库
随意起个昵称21 分钟前
【二分】洛谷P2920,P2985做题小记
c++·算法
sheji341624 分钟前
【开题答辩全过程】以 环保监督管理系统为例,包含答辩的问题和答案
java·eclipse
不会玩电脑的Xin.27 分钟前
Web请求乱码解决方案
java·javaweb
没书读了27 分钟前
计算机组成原理-考前记忆清单
线性代数·算法