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;
    }
};
相关推荐
Beyond_System|系统之外24 分钟前
【学编程】Python基础编程题100道(21-60)
开发语言·python·算法
漂流瓶jz2 小时前
UVA-1442 洞穴 题解答案代码 算法竞赛入门经典第二版
c++·算法·题解·aoapc·算法竞赛入门经典·uva
圣保罗的大教堂2 小时前
leetcode 835. 图像重叠 中等
leetcode
叠层归一研究院3 小时前
基于极限自指的叠层归一宇宙结构理论——无元外部封闭系统的内生区分模型
人工智能·经验分享·算法·agi
Selvaggia5 小时前
Diffusion Model 的基本原理与模型架构
算法
wabs6666 小时前
关于二叉树【力扣572.另一棵树的子树的思考】
数据结构·c++·算法·leetcode·二叉树
hanlin036 小时前
刷题笔记:力扣第41题-缺失的第一个正数
笔记·算法·leetcode
shehuiyuelaiyuehao6 小时前
算法50,分治归并,数组中的逆序对
java·算法
阳明山水7 小时前
校准分位数驱动智能库存决策
人工智能·深度学习·算法·机器学习·架构
别动我齐刘海8 小时前
ROS2 Jazzy + C++ 实战路线——进阶学习3
c++·人工智能·vscode·python·算法·机器学习·机器人