CanTechLab

Can

leetcode:202.快乐数

2024-04-02

Leetcode题目链接:202. 快乐数

题目描述:

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

「快乐数」 定义为:

  • 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。

  • 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。

  • 如果这个过程 结果为 1,那么这个数就是快乐数。

如果 n快乐数 就返回 true ;不是,则返回 false

解题思路:

快慢指针

  1. 快指针每次走两步,慢指针每次走一步,当二者相等时,即完成了一个循环周期。

  2. 判断是否因为 1 而引起循环

  3. 若是则为快乐数,反正则不是快乐数

我的答案:

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

提交结果: