(C++)快乐数--双指针法

个人主页:Lei宝啊 

愿所有美好如期而遇


力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/happy-number/

(C++)快乐数--双指针法_第1张图片

算法原理

双指针法,不一定是说就要使用指针,只是一种形象的说法,在数组中,我们一般将数组下标当做指针。这道题目,首先一定不会无限不循环,这是我们根据鸽巢原理得出的,所以既然我们知道他一定不会无限不循环,那就是一定会无限循环,所以最后要么循环是1,或者就循环不是1,我们也由此可以想到一类题目,就是判断一个链表带不带环,我们使用的就是快慢指针,最后判断快慢指针相遇的地方两个指针的值是不是1,是1就返回true,不是1就返回false。

图示

(C++)快乐数--双指针法_第2张图片

(C++)快乐数--双指针法_第3张图片

代码

class Solution {
public:
    int change(int num)
    {
        int rnum = 0;
        
        while(num)
        {
            int n = num % 10;
            rnum += n * n;
            num /= 10;
        }

        return rnum;
    }

    bool isHappy(int n) 
    {
        int slow = n;
        int fast = n;

        slow = change(slow);
        fast = change(fast);
        fast = change(fast);

        while(slow != fast)
        {
            slow = change(slow);
            fast = change(fast);
            fast = change(fast);
        }

        if(slow == 1)
        {
            return true;
        }
        else 
        {
            return false;
        }

    }
};

你可能感兴趣的:(算法,刷题,C++,算法,双指针)