LEETCODE 202. Happy Number 解题思路分析

题目大意:

快乐数

编写一个算法来判断一个数 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

解题思路分析:

这道题主要考察两个知识点:

  1. 如何判断无限循环
  2. 如何取得正整数每一位上的数。

对于第一个问题,我们需要建立一个集合来保存已经出现过的数字,如果再次出现该数字说明进入循环模式。第二个问题也不难,我们之前的文章多次讲过该问题,如果你只会将数字转成字符串后再对其进行处理的话,那么面试时你一定会被面试官低看一眼,因此建议你学习一下更为高效的处理方式,请参考 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-解题思路分析/
此条目发表在leetcode分类目录,贴了, , , 标签。将固定链接加入收藏夹。

发表评论

您的电子邮箱地址不会被公开。