3.LeetCode算法习题讲解--双指针--快乐数

一.题目

习题链接:202. 快乐数 - 力扣(LeetCode)

二.题目分析

给定正整数 n,循环执行操作: 把数字每一位拆开,求每位数字的平方相加,得到新数字;

  1. 若某一步结果等于 1 → 该数是快乐数,返回 true;
  2. 若过程进入循环、永远到不了 1 → 不是快乐数,返回 false。

三.算法原理讲解

通过上述分析,我们可以看出,最后都会进入循环

示例一:最终会进入全为1的循环;

示例二:最终会进入几个数的循环

所以这里我们联想到链表当中带环问题,那里我们定义了两个指针,一个快指针,一个慢指针,这里也是同样如此,但是我们这里的快慢指针并不是我们之前那样想的,是一个新的思想

思路: 定义一个慢指针指向第一个**数字(本题指向的是数字)**每次计算一次平方和

快指针也指向第一个数字,每次计算两次平方和,最后两个指针会相遇,如果相遇就判断相遇点是否是1

四.编写代码

注意:按我这种写法这里只能用do...while循环,因为刚开始定义的是让快慢指针相等,如果用while就不会进入循环,用do...while想让它们走然后再判断

cpp 复制代码
class Solution {
public:
    int num(int cycle)
    {
        int num = 0;
        while(cycle)
        {
            int bit = cycle %10;
            num += bit * bit;
            cycle = cycle / 10;
        }
      
        return num;
    }
    bool isHappy(int n) {
        int slow = n;
        int fast = n;
        do
        {
            slow = num(slow);
            fast = num(fast);
            fast = num(fast);
        }while(slow != fast);
        return slow == 1;
    }
};
相关推荐
Fuyo_11199 分钟前
C++ AVL树保姆级详解:从平衡因子到四大旋转机制
java·c++·算法
jktantan29 分钟前
每个节点 41 字节:把一棵百万节点树拆进 14 个 typed array
前端·javascript·vue.js·算法·typescript
揽星河..1 小时前
【C语言】猜数字游戏
c语言·算法·游戏
frjc1 小时前
分布式服务拆分实战指南:从底层逻辑到面试话术
微服务·面试·职场和发展
LabVIEW开发1 小时前
CTM-3 红外测温仪 + LabVIEW 温度怎么测?
算法·labview·测试·labview程序
纪念 2292 小时前
C++算法(六)
开发语言·c++·算法
Dumbness3 小时前
UIA 读微信群消息没有 id,怎么判断哪条是新的:后缀对齐在翻历史和撤回时整屏重报
python·算法
taka3 小时前
从 24x 到 141x:我用纯 Python 零依赖项目,扒开了 GPU 加速的性能黑洞
算法
UIU1143 小时前
P16237 [蓝桥杯 2026 省 B] 应急布线
数据结构·c++·算法·蓝桥杯
旖旎夜光3 小时前
LeetCode 315: 算右侧小于当前元素的个数(归并排序) —— 题解
c++·学习·算法·leetcode·排序算法