(3)双指针练习:快乐数

快乐数

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

编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」 定义为:
1. 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
2. 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
3. 如果这个过程 结果为 1,那么这个数就是快乐数。
如果 n快乐数 就返回 true ;不是,则返回 false

思路解析:

本题根据所给条件可以推出两种情况:

  1. 结果为1
  2. 结果不为1成环

如果将结果为1的看作为环,那么可以将上面两种情况归纳为一种情况:最后的计算结果一定会在环中,如果结果为1,那么环中的所有数值均为1,如果结果不为1,那么环中即为其他数值,如图所示:

通过将题目中对上面的结果进行抽象后,可以发现结果一定会成环,联系到题目:141. 环形链表可以考虑使用双指针算法中的快慢指针解决本题目,具体思路如下:

  1. 定义一个慢指针slow和一个快指针fast
  2. slow指针走一步,fast指针走两步
  3. 因为整个过程一定会成环,所以fast和slow指针一定会在环中的某一个位置相遇,判断相遇位置的数值是否为1
💡

本题提问:除了结果为1的另一种结果就是死循环,思考是否存在一种可能结果不是成环导致的死循环,而是无限增大导致的死循环

参考代码:

/** @lc app=leetcode.cn id=202 lang=cpp** [202] 快乐数*/// @lc code=start
class Solution
{
public:int sum_digit(int num){int sum = 0;while (num){int temp = num % 10;sum += temp * temp;num /= 10;}return sum;}bool isHappy(int n){int slow = n;int fast = sum_digit(n);while (slow != fast){slow = sum_digit(slow);fast = sum_digit(sum_digit(fast));}return fast == 1;}
};
// @lc code=end

思考题目解析:

本题中并不会出现因为数值无限增大而导致死循环,即一定会成环,可以使用鸽巢原理进行分析:

鸽巢原理:有n个鸽子巢,有n+1个鸽子,如果将鸽子放入鸽子巢中,那么至少会存在一个鸽子巢中的鸽子数量大于或等于1

参考资料:鸽巢原理 

题目中给到的提示数字范围为INT_MAX(32位系统下),假设现在一个有一个远大于INT_MAX的数值,例如9999999999(10个9),此时该数值的和为9^2\times 10,即810,那么说明在计算快乐数时,所有的给定数值最后的结果都会出现在[1, 810]这个范围中(鸽子巢),既然如此,根据鸽巢原理,假设数字变化的次数为811(鸽子),因为范围固定,那么最后一个数值肯定会再一次出现在[1, 810]这个范围中,此时就会出现结果循环,所以一定会出现至少一个数值是重复出现导致成环,所以不存在因为数值无限增大而导致死循环

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/707000.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

系统架构师考试(二)

敏捷方法 CMMI代表Capability Maturity Model Integration,是一种用于评估和改进组织软件工程和系统工程的模型。CMMI提供一个框架,帮助组织评估其软件和系统工程的成熟度,该模型基于过程成熟度模型(CMM)和集成项目管理…

Ubuntu 24 换国内源及原理 (阿里源)

备份原文件 sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak 编辑源文件 sudo gedit /etc/apt/sources.list.d/ubuntu.sources (阿里源) Types: deb deb-src URIs: https://mirrors.aliyun.com/ubunt…

鸿蒙HarmonyOS开发:@Builder装饰器,自定义构建函数

文章目录 一、自定义构建函数1、自定义组件内自定义构建函数2、全局自定义构建函数3、参数传递规则 二、示例演示1、Image组件2、layoutWeight属性3、定义模型类4、代码5、效果 一、自定义构建函数 ArkUI还提供了一种更轻量的UI元素复用机制Builder,Builder所装饰的…

LiveGBS流媒体平台GB/T28181用户手册-国标设备:设备列表、通道列表、流传输模式修改、查看通道播放、设备录像、在线状态、流量统计

LiveGBS流媒体平台GB/T28181用户手册-国标设备:设备列表、通道列表、流传输模式修改、查看通道播放、设备录像、在线状态、流量统计 1、国标设备1.1、设备列表1.1.1、查看通道1.1.2、更新通道1.1.3、编辑1.1.3、导入导出1.1.4、条件检索1.1.5、设备状态记录1.1.6、设备流量统计…

【极简】docker常用操作

镜像images是静态的 容器container是动态的,是基于镜像的,类似于一个进程。 查看docker images: docker images 或者docker image ls 查看docker container情况:docker ps -a,-a意思是--all 运行一个container: doc…

【全开源】场地预定小程序支持微信小程序+微信公众号+H5

XYvenue是基于FastAdminUniApp开发的多场馆场地预定小程序,提供运动场馆运营解决方案,适用于体育馆、羽毛球馆、兵乒球馆、篮球馆、网球馆等场馆。 功能特性 1、场馆管理 可添加多个预约场馆,小程序端切换场馆显示。 2、场地管理 可添加多…

Linux 第三十五章

🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C,linux 🔥座右铭:“不要等到什么都没有了…

拥有庞大用户群体的国际顶级安全厂商,究竟在关注什么?

5月6-9日,2024第33届RSA年度会议在旧金山举行,吸引了超过 40000 名来自世界各地的网络安全专业人士。如此盛会,易安联当然不能缺席,我们万里奔赴,亲身领略这场享誉全球的技术盛宴。 ‍‍ ‍ 4天的时间里,…

TikTok Shop本土店回款如何高效查询?用EasyBoss ERP回款记录功能!

大家投入时间和精力去运营Shopee/TikTok本土店,最最最开心的事情就是看赚了多少钱!但是,但是!很多老板入驻的平台、经营的店铺都不止一个,想要查看不同平台和店铺回款,就需要不断切换不同的店铺后台、下载数…

计算机发展史故事【17】

任天堂崛起 七十年代美国雅达利公司开创一个高科技的电脑游戏业。无独有偶,一家专营电脑游戏机的日本任天堂公司,自八十年代初期把它的家庭电脑游戏机(FC)投放市场后,不平静的世界被再一次激起轩然大波。这个小小的日本…

录短视频用什么麦克风好?盘点五款热门无线领夹麦克风

如今是一个短视频飞速发展的时代,越来越多自媒体人通过短视频的方式来进行直播带货、生活Vlog、线上K歌等,记录下生活里种种美丽的瞬间。不过一个好的视频除了要有巧妙的构思和清晰稳定的拍摄外,干净的声音也是必不可少的部分。短视频归根结底…

26版SPSS操作教程(高级教程第二十三章)

目录 前言 粉丝及官方意见说明 第二十三章一些学习笔记 第二十三章一些操作方法 时间序列模型 时间序列的建立和平稳化 数据假设 具体操作 定义时间变量 时间序列的平稳化 绘制相应的时间序列图 序列图 自相关图(autocorrelation chart) 对…