当前位置: 首页 > news >正文

【双指针】专题:LeetCode 202题解——快乐数

快乐数

  • 一、题目链接
  • 二、题目
  • 三、题目解析
  • 四、算法原理
    • 扩展
  • 五、编写代码

一、题目链接

快乐数

二、题目

在这里插入图片描述

三、题目解析

快乐数的定义中第二点最重要,只有两种情况,分别拿示例1、示例2分析吧:

在这里插入图片描述
示例1中一旦出现1了,继续重复过程就还是1,所以一旦出现1了就返回true。

示例2中会出现无限循环,始终变不到1。

四、算法原理

在快乐数的定义里,最终结果要么是1,要么是无限循环但始终变不到1。也就是类似示例1、示例2的情况。

将上述两种情况抽象成图:

在这里插入图片描述

能抽象成一种图的原因:情况1是出现1了,继续重复过程一直是1,也就是也有一个环,只不过环里的数都是1罢了。而情况2中环里的数都不是1。

抽象成带环的图很像之前学习过的“判断链表是否带环”一题,只不过本题不是判断是否有环,而是判断环里的每一个值是多少。“判断链表是否带环”一题用的是“快慢双指针法”,本题同理也用这个方法。

步骤:

  1. 定义快慢双指针
  2. 慢指针每次向后走1步,快指针每次向后走2步
  3. 判断快慢指针相遇时的值

双指针法只是一种思想,并不是用真的指针,像本题中,甚至可以把某一个数充当成指针。

扩展

若题中没给定义第二点呢,是不是还有第3种情况:一个数一直进行下去永不成环。

证明:一个数进行下去一定会成环。

运用到了鸽巢原理(抽屉原理):n个巢穴,n + 1只鸽子,至少有一个巢穴里的鸽子数是大于1的。

在这里插入图片描述

五、编写代码

因为经常用到这个数上每一位的平方和,所以可以封装成一个函数完成:

// 返回 n 这个数每一位的平方和
int bitSum(int n)
{int sum = 0;while (n){int t = n % 10;sum += t * t;n /= 10;}return sum;
}

一上来定义slow和fast相等会导致循环进不去,所以应该把slow和fast定义成不相等的:

// 定义快慢双指针
int slow = n, fast = n;
// 慢指针每次向后走1步,快指针每次向后走2步
while (slow != fast){}

可以让fast指向第二个位置。相当于一上来就让slow走1步到第一个数的位置,fast走2步到第二个数的位置:

// 定义快慢双指针
int slow = n, fast = bitSum(n);
// 慢指针每次向后走1步,快指针每次向后走2步
while (slow != fast){}

完整代码如下:

class Solution {
public:// 返回 n 这个数每一位的平方和int bitSum(int n){int sum = 0;while (n){int t = n % 10;sum += t * t;n /= 10;}return sum;}bool isHappy(int n) {// 定义快慢双指针int slow = n, fast = bitSum(n);// 慢指针每次向后走1步,快指针每次向后走2步while (slow != fast){slow = bitSum(slow);fast = bitSum(bitSum(fast));}// 判断快慢指针相遇时的值return slow == 1;}
};

相关文章:

  • v3 自定义导航头部
  • OpenCV学习之获取图像所有点的坐标位置(二)
  • 从图像“看出动作”
  • Redis集群部署三主三从(docker-compose方式)
  • 2025.04.15【Connection】| 生信数据可视化:连接图绘制指南
  • 跨域(CORS)的几种方式
  • 双重路由引入的环路,选路次优的产生以及解决方法
  • 2025最新版flink2.0.0安装教程(保姆级)
  • 层次式架构核心:中间层的功能、优势与技术选型全解析
  • Oracle中用户密码过期修改为不限制
  • Linux系统-scp命令--两台服务器之间传输文件
  • 利用纯JS开发浏览器小窗口移动广告小功能
  • 通过微信APPID获取小程序名称
  • Spring 框架知识整理
  • K8S_ResourceQuota与LimitRange的作用
  • Materials Studio学习笔记(一)——Materials Studio软件介绍
  • Flutter学习 滚动组件(1):ListView基本使用
  • 【差分隐私相关概念】瑞丽差分隐私(RDP)命题4
  • 宝塔面板中解锁Laravel日志查看的奥秘
  • pull.rebase 三种模式的应用场景
  • 驻美国使馆发言人就美方希就关税问题与中方对话答记者问
  • 美联储官员:货币政策不会立即改变,金融市场波动或致美国经济增长承压
  • 南国置业:控股股东电建地产拟受让公司持有的房地产开发业务等相关资产和负债
  • 破解160年基因谜题,我国科学家补上豌豆遗传研究最后拼图
  • 滁州一交通事故责任认定引质疑:民警和司法鉴定人被处罚,已中止诉讼
  • 贵州赤水被指“整改复耕”存形式主义,当地部署耕地流出整改“回头看”