首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >优选算法:快乐数(双指针)

优选算法:快乐数(双指针)

作者头像
Yuzuriha
发布2026-01-14 15:50:27
发布2026-01-14 15:50:27
710
举报
文章被收录于专栏:Linux网络Linux网络

题目详情:. - 力扣(LeetCode)

一 . 题目解析

将一个正整数的每位数的平方相加得到一个新数,再将得到的新数按相同的方法,再得到一个新数........ 由此不断的下去。这样的操作会得到两种情况:1.得到1的无穷循环(因为通过1得到的新数仍然还是1),2.得到非1的无穷循环。

如果能得到1 那么就是快乐数,反之不是

二 . 算法分析

首先我来给出两个例图,帮助大家理解

这两种情况都是循环的。这就不由的让我们想到带环问题,对于带环问题我们可以记住一个结论性的东西:在带环问题中,我们可以定义出两个指针(快慢指针:快指针一次走两步,慢指针一次走一步)不论这两个指针相隔多远,最后一定会在环里面相遇。

所以,本题的解题思路就是:1.先实现一个函数其功能为:根据我们传的数得到新数 2.定义出快慢指针,走几步就相当于调用几次函数 3.利用循环,当两个指针相遇时跳出循环。然后判断此时快慢指针指向的元素是否为1,若是则为快乐数,反之不是。

三 . 代码实现

代码语言:javascript
复制
class Solution {
public:

    int sub(int num)//得到新数
    {
        int sum = 0;
        while(num)
        {
            sum += (num % 10) * (num % 10);
            num /= 10;
        }
        return sum;
    }

    bool isHappy(int n)
    {
        //快慢指针
        int low = n;
        int fast = sub(n);

        while (fast != low)
        {
            low = sub(low);
            fast = sub(sub(fast));
        }
        return fast == 1;//判断
    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-01-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一 . 题目解析
  • 二 . 算法分析
  • 三 . 代码实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档