LeetCode:快乐数【202】
2024-08-25 06:50:16
LeetCode:快乐数【202】
题目描述
编写一个算法来判断一个数是不是“快乐数”。
一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。
示例:
输入: 19
输出: true
解释:
题目分析
这道题定义了一种快乐数,就是说对于某一个正整数,如果对其各个位上的数字分别平方,然后再加起来得到一个新的数字,再进行同样的操作,如果最终结果变成了1,则说明是快乐数,如果一直循环但不是1的话,就不是快乐数,那么现在任意给我们一个正整数,让我们判断这个数是不是快乐数,题目中给的例子19是快乐数,那么我们来看一个不是快乐数的情况,比如数字11有如下的计算过程:
1^2 + 1^2 = 2
2^2 = 4
4^2 = 16
1^2 + 6^2 = 37
3^2 + 7^2 = 58
5^2 + 8^2 = 89
8^2 + 9^2 = 145
1^2 + 4^2 + 5^2 = 42
4^2 + 2^2 = 20
2^2 + 0^2 = 4
我们发现在算到最后时数字4又出现了,那么之后的数字又都会重复之前的顺序,这个循环中不包含1,那么数字11不是一个快乐数,发现了规律后就要考虑怎么用代码来实现,我们可以用set来记录所有出现过的数字,然后每出现一个新数字,在set中查找看是否存在,若不存在则加入表中,若存在则跳出循环,并且判断此数是否为1,若为1返回true,不为1返回false。
非快乐数是无限循环的过程,一旦之后出现了之前的结果,就会再次陷入循环,此时我们利用set脱身,这是这道题的关键!。
Java题解
class Solution {
public boolean isHappy(int n) {
Set<Integer> set = new HashSet<Integer>();
while(n!=1&&!set.contains(n))
{
set.add(n);
int sum = 0;
while(n!=0)
{
sum+=Math.pow(n%10,2);
n/=10;
}
n=sum;
}
return n==1; }
}
最新文章
- chrome控制台模拟hover、focus、active等状态,方便调试
- 【C#公共帮助类】 WebHelper帮助类
- Android中的checkbox和RadioButton的区别
- 如何在Visual Studio中开发自己的代码生成器插件
- Android 实现页面的延时跳转
- phpcms v9网站搬家更换域名的方法
- load/get延迟加载和及时加载
- TOM大叔的几道Javascript题目与解答
- spring mvc获取request HttpServletRequest
- 1016. 部分A+B (15)
- Spark视频 王家林 Spark公开课大讲坛第二期: Spark的Shark和SparkSQL
- 一个仿 github for windows 及 windows 8 的进度条
- 初学python(print使用、条件分支、循环、模块引用)
- 【转】 UIview需要知道的一些事情:setNeedsDisplay、setNeedsLayout
- C#入门经典(第五版)学习笔记(二)
- Lucene学习总结之七:Lucene搜索过程解析
- php使用PDO方法详解
- UVa 474 - Heads / Tails Probability
- linux_ssh
- eclipse中英文(等各国语言)版本转换发放
热门文章
- 计算两个有序数组的第K大数(转)
- HTTP图解--了解Web及网络基础
- GO语言使用开源SSH模拟终端
- tornado 初学
- Android应用架构之MVP---&;gt;天气实例
- Thread 常搞混的几个概念sleep、wait、yield、interrupt
- Iwfu-GitHubclient使用
- Jenkins入门(一)
- (C#)为应用程式设定运行权限(System.Security类下的GenericIdentity,GenericPrincipal,PrincipalPermission)
- Xampp 环境问题集合