欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > leetcode_202. 快乐数_java

leetcode_202. 快乐数_java

2025/4/18 21:01:42 来源:https://blog.csdn.net/weixin_46211609/article/details/147116495  浏览:    关键词:leetcode_202. 快乐数_java

202. 快乐数https://leetcode.cn/problems/happy-number/

1、题目

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

「快乐数」 定义为:

  • 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
  • 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
  • 如果这个过程 结果为 1,那么这个数就是快乐数。

如果 n快乐数 就返回 true ;不是,则返回 false

示例 1:

输入:n = 19
输出:true
解释:
1^{2}+9^{2} = 82
8^{2}+2^{2} = 68
6^{2}+8^{2} = 100
1^{2}+0^{2}+0^{2} = 1

示例 2:

输入:n = 2
输出:false

提示:

  • 1 <= n <= 2^{31}-1

2、题解

题解1:使用递归

class Solution {// 计算数字 n 各位数字的平方和public Integer getSum(int n) {int sum = 0;while(n != 0) {int m = n % 10;  // 获取当前最后一位数字sum = sum + m * m;  // 累加平方n = n / 10;  // 去除最后一位数字}return sum;}// 判断 n 是否为快乐数public boolean Happy(int n, Set<Integer> allSum) {int sum = getSum(n);  // 计算平方和if(sum == 1) {  // 快乐数条件return true;} else {if(allSum.contains(sum)) {  // 出现重复的平方和,陷入循环return false;} else {allSum.add(sum);  // 添加到已出现的平方和集合return Happy(sum, allSum);  // 继续递归}}}// 判断数字 n 是否为快乐数public boolean isHappy(int n) {Set<Integer> allSum = new HashSet<Integer>();  // 存储出现的平方和return Happy(n, allSum);  // 调用判断方法}
}

题解2:不使用递归

class Solution {// 计算数字 n 各位数字的平方和public Integer getSum(int n) {int sum = 0;while(n != 0) {int m = n % 10;  // 获取当前最后一位数字sum = sum + m * m;  // 累加平方n = n / 10;  // 去除最后一位数字}return sum;  // 返回平方和}// 判断数字 n 是否为快乐数public boolean isHappy(int n) {Set<Integer> allSum = new HashSet<Integer>();  // 存储已出现的平方和// 如果 n 不是 1 且没有出现重复的平方和,继续迭代while(n != 1 && !allSum.contains(n)) {allSum.add(n);  // 将当前平方和加入集合n = getSum(n);  // 获取新的平方和}return n == 1;  // 如果最终 n 为 1,说明是快乐数}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词