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

专题一_双指针_快乐数

一:题目解析

总结:

①:快乐数进行在某一次"对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和"操作后,是永远循环为1

②:非快乐数也是循环的

二:算法原理

  • 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。

        我们将这一步命名为bitsum函数

所以根据题目,我们知道快乐数,在某一次进行bitsum函数操作后会一直是1的循环,因为1进行bitsum永远是1 

但其实非快乐数也有自己的循环,如2,其的变化路径为:2 -> 4 -> 16 -> 37 -> 58 -> 89 -> 145 -> 42 -> 20 -> 4   此时为4了形成循环

所以快乐数和非快乐数的区别就是,快乐数的循环中的每一个数字都是1,而非快乐数的循环的每一个数字都不是1 所以我们现在只需要判断,一个数进入循环后,是否为1即可!

问题是怎么判断一个数字进行bitsum的操作后,进入了循环?很简单,只需快慢指针的思路即可,因为只要成环,一个快一个慢,就一定会相遇,好比你跑步比一个人快,在操作这个环中,只要时间够久,则你一定会和跑步慢的人相遇!

所以一个slow就等于题目给的n,一个fast等于bitsum(n),然后循环地进行slow走一步,fast走两步,则二者一定会在环中相遇!此时再判断相遇时的值是什么即可!

三:代码编写

class Solution {
public:int bitsum(int n){int sum = 0;while(n){sum += (n%10)*(n%10);//每个位置上数字的平方和n= n/10;//让下一次取到前一个位置是的数字}return sum;}bool isHappy(int n) {int slow = n, fast = bitsum(n);while(slow!=fast){//slow走一步slow = bitsum(slow);//fast走两步fast = bitsum(fast);fast = bitsum(fast);}return slow==1;}
};

Q:为什么你能保证非快乐数一定成环?

A:鸽巢原理,n个巢穴 n+1鸽子 所以至少一个巢穴的鸽子数大于1

首先题目的值的最大值为2^31次方-1 为:2,147,483,647,所以我们干脆直接将其记作9999999999,此时其已经是十位数的极限的 为什么我们要全取9?因为我想说明再大的值都适用于鸽巢原理,此时9999999999根据规则变成下一个数的时候 其实最大的数810

所以现在任何数字根据规则变成下一个数  下一个数的区间就是[1,810]
[1,810]就是巢穴 所以现在一个数字最多变810次 就一定会成环 甚至可能根本不会变这么多次就会成环;所以对于2,147,483,647来说,次数只会更少!

http://www.xdnf.cn/news/970165.html

相关文章:

  • LeetCode 3442.奇偶频次间的最大差值 I:计数
  • 使用分级同态加密防御梯度泄漏
  • Web 毕设篇-适合小白、初级入门练手的 Spring Boot Web 毕业设计项目:智驿AI系统(前后端源码 + 数据库 sql 脚本)
  • 实现多路视频截图预览之后上传到后台系统
  • 2025年ASOC SCI2区TOP,协同搜索框架自适应算法+多无人机巡检规划,深度解析+性能实测
  • 专题一_双指针_复写零
  • HDFS 3.4.1 集成Kerberos 实现账户认证
  • 驭码CodeRider 2.0深度测评:助力高效开发【探索化学奇妙世界】网站
  • 【靶场】xxe漏洞2
  • 黑马Mybatis
  • UE5 学习系列(三)创建和移动物体
  • MySQL事务——博主总结
  • C# Serilog 日志
  • 西电计组第四章-存储系统
  • 72道Nginx高频题整理(附答案背诵版)
  • 【Qt】显示类控件 QLabel、QLCDNumer、QProgressBar、QCalendarWidget
  • ROS-编写工作区、功能包、节点
  • 通过Elastic EDR看smbexec并进行二次开发Bypass
  • @component、@bean、@Configuration的区别
  • 在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
  • MySQL:InnoDB架构(内存架构篇)
  • Grey任命李文杰为中国总裁,开启增长新章
  • 云服务运行安全创新标杆:阿里云飞天洛神云网络子系统“齐天”再次斩获奖项
  • 12要素法:构建高效云原生应用
  • 鸿蒙Next仓颉语言开发实战教程:下拉刷新和上拉加载更多
  • leetcode:42. 接雨水(秒变简单题)
  • 代码训练LeetCode(27)接雨水
  • 【PX4飞控】右手坐标系与右手系旋转正方向的定义与判断方法
  • go全局配置redis,全局只需要连接一次,然后全局可以引用使用
  • UVa12298 3KP-BASH Project