题目大意:
快乐数
编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。
如果 n 是快乐数就返回 True ;不是,则返回 False 。
示例:
输入:19 输出:true 解释: 12 + 92 = 82 82 + 22 = 68 62 + 82 = 100 12 + 02 + 02 = 1
如果想查看本题目是哪家公司的面试题,请参考以下免费链接: https://leetcode.jp/problemdetail.php?id=202
解题思路分析:
这道题主要考察两个知识点:
- 如何判断无限循环
- 如何取得正整数每一位上的数。
对于第一个问题,我们需要建立一个集合来保存已经出现过的数字,如果再次出现该数字说明进入循环模式。第二个问题也不难,我们之前的文章多次讲过该问题,如果你只会将数字转成字符串后再对其进行处理的话,那么面试时你一定会被面试官低看一眼,因此建议你学习一下更为高效的处理方式,请参考 LEETCODE常用小知识点总结(不断更新)中第一段落。
实现代码:
public boolean isHappy(int n) { Set<Integer> set = new HashSet<>(); // 保存已出现过的数字 while(n!=1){ // 如果当前数字不等于1,一直循环 // 如果当前数字出现过,返回false if(set.contains(n)) return false; // 将当前数字保存进set set.add(n); // 求和 int sum=0; while(n>0){ // 当前位上的数字 int digit = n%10; // 将当前位上的数字乘方后累加至和 sum+=digit*digit; n/=10; } // 将和设置为n,继续循环 n=sum; } return true; }
本题解法执行时间为1ms。
Runtime: 1 ms, faster than 84.27% of Java online submissions for Happy Number.
Memory Usage: 37.3 MB, less than 6.06% of Java online submissions for Happy Number.
本网站文章均为原创内容,并可随意转载,但请标明本文链接如有任何疑问可在文章底部留言。为了防止恶意评论,本博客现已开启留言审核功能。但是博主会在后台第一时间看到您的留言,并会在第一时间对您的留言进行回复!欢迎交流!
本文链接: http://leetcode.jp/leetcode-202-happy-number-解题思路分析/