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


目录
相关文章
|
7月前
|
算法
【算法专题突破】双指针 - 快乐数(3)
【算法专题突破】双指针 - 快乐数(3)
20 0
|
6天前
|
算法
[leetcode] 快乐数 E
[leetcode] 快乐数 E
|
6天前
|
存储 算法 Java
leetcode-202:快乐数
leetcode-202:快乐数
22 0
【剑指offer】-和为S的两个数-38/67
【剑指offer】-和为S的两个数-38/67
|
6天前
|
算法 Java C++
「LeetCode」202. 快乐数
「LeetCode」202. 快乐数
19 0
|
7月前
|
算法
【Leetcode-190.颠倒二进制位 -191.位1的个数 -202.快乐数】
【Leetcode-190.颠倒二进制位 -191.位1的个数 -202.快乐数】
28 0
|
11月前
|
算法
Leecode202. 快乐数
Leecode202. 快乐数
50 0
|
12月前
|
算法 C++ 索引
每日算法系列【LeetCode 287】寻找重复数
每日算法系列【LeetCode 287】寻找重复数
|
算法
LeetCode每日1题--快乐数
LeetCode每日1题--快乐数
73 0
|
存储 算法
LeetCode:202. 快乐数
题目描述:编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。 如果这个过程 结果为 1,那么这个数就是快乐数。 如果 n 是 快乐数 就返回 true ;不是,则返回 false 。