【算法专题突破】双指针 - 快乐数(3)

简介: 【算法专题突破】双指针 - 快乐数(3)

1. 题目解析

题目链接:202. 快乐数 - 力扣(Leetcode)

这道题的题目也很容易理解,

看一下题目给的示例就能很容易明白,

但是要注意一个点,最后有可能无限循环无法到达1。

这个时候我们就要想一下怎么判断他是无线循环呢?

实际上,当他在进行平方和的计算中,同一个数字再次出现的时候,

就证明他进入无限循环了,来看个例子:

如果我们计算 2 是不是快乐数,当再次出现 4 这个数的时候,

我们就可以知道,他进入无限循环了。

2. 算法原理

我们可以想象一下,

题目给出的两种情况,其实都是一个循环,

如果是快乐数,就会一直循环得到1,

如果不是快乐数,就会按照自己的节奏循环,永远到不了1,

这个时候吗,我们就可以用快慢指针的思想来做这道题,

让一个指针走两步,一个指针走一步,当两个指针相遇的时候,

他们肯定已经开始循环了,如果相遇的时候,

值为1就是快乐数,如果值不为1就证明不是快乐数。

3. 代码编写

class Solution {
public:
    bool isHappy(int n) {
        int fast = n, slow = n;
        while(true) {
            slow = Sum(slow);
            fast = Sum(Sum(fast));
            if(fast == slow) break;
        }
        return fast == 1;
    }
private:
    int Sum(int n) {
        int sum = 0;
        while(n) {
            int tmp = n % 10;
            sum += tmp * tmp;
            n /= 10;
        }
        return sum;
    }
};

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~

相关文章
|
1天前
|
存储 算法 容器
算法:双指针
算法:双指针
10 3
|
17天前
|
算法 前端开发 JavaScript
< 每日算法:一文带你认识 “ 双指针算法 ” >
`双指针`并非指的是一种具体的公式或者范式。而是一种运算思路,用于节省逻辑运算时间的`逻辑思路`!双指针算法通常用于`优化时间复杂度`!
< 每日算法:一文带你认识 “ 双指针算法 ” >
|
22天前
|
算法
|
28天前
|
算法
优选算法|【双指针】|611.有效三角形的个数
优选算法|【双指针】|611.有效三角形的个数
|
28天前
|
算法
优选算法|【双指针】|202.快乐数
优选算法|【双指针】|202.快乐数
|
28天前
|
算法
优选算法|【双指针】283.移动零
优选算法|【双指针】283.移动零
|
28天前
|
算法
优选算法|【双指针】|1089.复写零
优选算法|【双指针】|1089.复写零
|
1天前
|
存储 算法 数据可视化
基于harris角点和RANSAC算法的图像拼接matlab仿真
本文介绍了使用MATLAB2022a进行图像拼接的流程,涉及Harris角点检测和RANSAC算法。Harris角点检测寻找图像中局部曲率变化显著的点,RANSAC则用于排除噪声和异常点,找到最佳匹配。核心程序包括自定义的Harris角点计算函数,RANSAC参数设置,以及匹配点的可视化和仿射变换矩阵计算,最终生成全景图像。
|
1天前
|
算法 Serverless
m基于遗传优化的LDPC码NMS译码算法最优归一化参数计算和误码率matlab仿真
MATLAB 2022a仿真实现了遗传优化的归一化最小和(NMS)译码算法,应用于低密度奇偶校验(LDPC)码。结果显示了遗传优化的迭代过程和误码率对比。遗传算法通过选择、交叉和变异操作寻找最佳归一化因子,以提升NMS译码性能。核心程序包括迭代优化、目标函数计算及性能绘图。最终,展示了SNR与误码率的关系,并保存了关键数据。
11 1
|
3天前
|
算法 调度
考虑需求响应的微网优化调度模型【粒子群算法】【matlab】
考虑需求响应的微网优化调度模型【粒子群算法】【matlab】