LeetCode-202 快乐数

一、题目描述

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

示例:
输入:19

输出:true
1^2 + 9^2 = 82\\8^2 + 2^2 = 68\\6^2 + 8^2 = 100\\1^2 + 0^2 + 0^2 = 1

二、解题思路

使用“快慢指针”思想找出循环:“快指针”每次走两步,“慢指针”每次走一步,当二者相等时,即为一个循环周期。此时,判断是不是因为1引起的循环,是的话就是快乐数,否则不是快乐数。

三、代码实现

class Solution {
public:
    int bitSquareSum(int n) {
        int sum = 0;
        while (n > 0) {
            int bit = n % 10;
            sum += bit*bit;
            n /= 10;
        }
        return sum;
    }
    bool isHappy(int n) {
        int slow = n, fast = bitSquareSum(n);
        while (slow != fast) {
            slow = bitSquareSum(slow);
            fast = bitSquareSum(fast);
            fast = bitSquareSum(fast);
        }
        return slow == 1;
    }
};

四、总结

快慢指针的思想,类似题:判断数组是否有环

五、参考链接

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目: 编写一个算法来判断一个数是不是 “快乐数”。 一个 “快乐数” 定义为:对于一个正整数,每一次将该数替换为...
    爱写Bug阅读 1,794评论 0 1
  • 来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/happy-...
    entre_los_dos阅读 2,166评论 0 0
  • 原题链接 暴力求解,快乐就完事了,这种题,如果不是快乐数,肯定会进入到一个死循环中,在多少次之后,如果没有达成“快...
    鬼鬼812阅读 1,358评论 0 1
  • 题目大意 编写一个算法来判断一个数是不是“快乐数”。 一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每...
    不要甜的红烧肉阅读 806评论 0 0
  • 编写一个算法来判断一个数是不是“快乐数”。一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数...
    上行彩虹人阅读 936评论 0 0