[双指针] 3. 力扣--快乐数

一. 题目描述

cpp 复制代码
class Solution 
{
public:
    bool isHappy(int n) 
    {
        
    }
};

二. 解题思路

下面我们称 将一个正整数替换为他每个位置上的数字的平方和的操作 为F操作。

1) 题干中快乐数定义的第二点已经明确告诉我们,一个数持续进行F操作只有两种情况:

  1. 重复这个数直到这个数变为1(之后,也可以看作是一个环)。

  2. 无限循环但是永远到不了1(也是有环的,只不过不是在1中一直循环)。

为什么一定会成环,就不可能一条直线的无限循环下去么?

2)我们这个系列的双指针算法只是一种思想,用来标记一个位置。这个指针可以是一个真正的指针,也可以是数组下标,甚至直接是结构中存储的数据。比如本题就是直接用数做快慢指针。

3)因为有环 ,所以我们找到的相遇点的值一定是环内的值。相遇点的值如果是1,那么这个数就是快乐数,return true; 否则不是快乐数,return false;

4)步骤:

  1. 定义快慢指针。

  2. 慢指针一次走一步,快指针一次走两步。

  3. 判断相遇点的值。

三. 代码实现

cpp 复制代码
class Solution 
{
public:
    int Sum(int num)
    {
        int sum = 0;
        while(num)
        {
            sum += (num % 10) * (num % 10);
            num /= 10;
        }
        return sum;
    }

    bool isHappy(int n) 
    {
        int slow = n, fast = Sum(n);
        while(slow != fast)
        {
            fast = Sum(Sum(fast));
            slow = Sum(slow);
        }
        return slow == 1;
    }
};
相关推荐
小O的算法实验室2 小时前
IEEE TASE,基于MPC的多无人机协同搜索竞争群体优化方法
算法
Tbisnic2 小时前
BGE-M3 算法详解:从模型架构到三种检索方式的数学原理
算法·自然语言处理·大模型·bert·transformer·注意力机制
Brilliantwxx3 小时前
【算法从零到千】【55-58】哈希位图+常见数学运算 接口
算法
空堂与归4 小时前
用户分群找不到规律?用K-Means聚类算法自动发现数据模式
算法·机器学习·kmeans·聚类
动词ing4 小时前
【C语言】自定义函数+指针入门
c语言·开发语言·算法
重生之后端学习4 小时前
283. 移动零[简单]✅
开发语言·数据结构·算法·leetcode·职场和发展
一只小小的芙厨5 小时前
基础数论总结
笔记·学习·算法
夜不会漫长6 小时前
C++入门(1)
开发语言·c++·算法
wen_zhufeng7 小时前
IndexTTS 2.5 技术报告
人工智能·算法·机器学习
大熊背8 小时前
树莓派相机自动白平衡详解(四)
算法·树莓派·白平衡·isppipeline