LeetCode-202-快乐数

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

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

如果 n 是快乐数就返回 True ;不是,则返回 False 。

示例:

输入:19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/happy-number

解题思路

解决一个问题:如何判断是否会无限循环
可以借助之前写过的判断链表是否有环,这里将节点换成数字罢了
仍然是快慢指针,一个一次"走一格",另一个一次"走两格",如果相遇时不为1则说明有死循环

代码

class Solution {
    private int getNext(int n) {
        int result = 0;
        while (n != 0) {
            result += Math.pow(n % 10, 2);
            n /= 10;
        }
        return result;
    }

    public boolean isHappy(int n) {
        int slow = n, quick = getNext(n);
        while (slow != quick) { // 存在闭环则跳出
            if (slow == 1 || quick == 1) {
                return true;
            }
            slow = getNext(slow);
            quick = getNext(getNext(quick));
        }
        return slow == 1;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数...
    滨岩阅读 163评论 0 0
  • 来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/happy-...
    entre_los_dos阅读 275评论 0 0
  • 一、题目描述 编写一个算法来判断一个数是不是“快乐数”。一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它...
    书瓖果fifty阅读 231评论 0 0
  • 题目 编写一个算法来判断一个数是不是“快乐数”。 一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位...
    LonnieQ阅读 70评论 0 1
  • 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数...
    放下梧菲阅读 59评论 0 0