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; }
}

最新文章

  1. chrome控制台模拟hover、focus、active等状态,方便调试
  2. 【C#公共帮助类】 WebHelper帮助类
  3. Android中的checkbox和RadioButton的区别
  4. 如何在Visual Studio中开发自己的代码生成器插件
  5. Android 实现页面的延时跳转
  6. phpcms v9网站搬家更换域名的方法
  7. load/get延迟加载和及时加载
  8. TOM大叔的几道Javascript题目与解答
  9. spring mvc获取request HttpServletRequest
  10. 1016. 部分A+B (15)
  11. Spark视频 王家林 Spark公开课大讲坛第二期: Spark的Shark和SparkSQL
  12. 一个仿 github for windows 及 windows 8 的进度条
  13. 初学python(print使用、条件分支、循环、模块引用)
  14. 【转】 UIview需要知道的一些事情:setNeedsDisplay、setNeedsLayout
  15. C#入门经典(第五版)学习笔记(二)
  16. Lucene学习总结之七:Lucene搜索过程解析
  17. php使用PDO方法详解
  18. UVa 474 - Heads / Tails Probability
  19. linux_ssh
  20. eclipse中英文(等各国语言)版本转换发放

热门文章

  1. 计算两个有序数组的第K大数(转)
  2. HTTP图解--了解Web及网络基础
  3. GO语言使用开源SSH模拟终端
  4. tornado 初学
  5. Android应用架构之MVP---&amp;gt;天气实例
  6. Thread 常搞混的几个概念sleep、wait、yield、interrupt
  7. Iwfu-GitHubclient使用
  8. Jenkins入门(一)
  9. (C#)为应用程式设定运行权限(System.Security类下的GenericIdentity,GenericPrincipal,PrincipalPermission)
  10. Xampp 环境问题集合