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

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

个人主页:Lei宝啊

愿所有美好如期而遇


算法原理

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

图示

代码

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;
        }
    }
};


目录
相关文章
|
算法
【算法专题突破】双指针 - 快乐数(3)
【算法专题突破】双指针 - 快乐数(3)
59 0
|
3月前
acwing 789 数的范围
acwing 789 数的范围
28 4
|
8月前
|
算法
[leetcode] 快乐数 E
[leetcode] 快乐数 E
|
8月前
|
存储 算法 Java
leetcode-202:快乐数
leetcode-202:快乐数
54 0
|
8月前
|
算法 Java C++
「LeetCode」202. 快乐数
「LeetCode」202. 快乐数
51 0
|
算法
【Leetcode-190.颠倒二进制位 -191.位1的个数 -202.快乐数】
【Leetcode-190.颠倒二进制位 -191.位1的个数 -202.快乐数】
54 0
|
JavaScript 索引
leetcode_18. 四数之和,n 数之和完结篇
题目链接:18. 四数之和 这个人已经靠 n 数之和水了好几篇文章了,已经不想再水了 我之前写过好几篇的 nSum 相关的文章,在我的个人主页里面搜索可以发现有三篇相关的文章,当然看的人不多,但是还是决定要把这个类型题写完,也就是今天的终章 `nSum`
leetcode_18. 四数之和,n 数之和完结篇
|
算法
LeetCode每日1题--快乐数
LeetCode每日1题--快乐数
107 0

热门文章

最新文章

下一篇
开通oss服务