LeetCode每日一题只 快乐数

目录

题目介绍: 

 算法原理:

鸽巢原理:

如何找到环里元素:

代码实现:


题目介绍: 

题目链接:. - 力扣(LeetCode)

 算法原理:

我先简单举两个例子:

19: 

2:

 

  其实大部分人拿到这道题,第一感觉就是如果是快乐数,只需利用循环一步步求解,最后如果有一次结果为1时,就是快乐数,可是如果不是快乐数,岂不是要一直循环下去?这道题最重要的一点就是如果不是快乐数最后的数据是必定成环的,证明需要利用鸽巢原理:

鸽巢原理:

如果有n个巢穴,n+1只鸽子,那么必定会有一个巢血有2个或以上的鸽子。

这个原理很简单,我们利用它来证明一下这道题若不是快乐数必定成环:

利用极限法:

来看看这道题数据的最大值2的31次方=2147483648,不妨再去大点直接取9999999999,我们看看这个数经历一次变化(替换为该数每一位的平方和)后会变成多少,也就是9*9*10=810,这个最大的数经历一次变化后变为810,那么比这个数小的数经历一次变化肯定不会大于810,所以我们的巢就是1-810,也就是有810个巢,那我们的鸽子就是变化的次数,一个数若变化811次,则至少有2个数是重复的,重复的一出现,后面就全一样了,就成环了。


 那如果是快乐数,是不是就没有环呢?其实也有,快乐数最后变为1后,若再经历一次变化还是1,其实也成环了,只是环里的元素都是1,而不是快乐数环里的元素都不是1,所以这道题目的思路很清晰了,我们只要找到一个环里元素判断是不是1就行了。

如何找到环里元素:

  面对这种环的问题,我们可以利用双指针里的快慢指针法就可以求解了,如图:

slow慢指针一次走一步,fast快指针一次走两步。

还没进环之前,slow永远无法追上fast指针,但当进环后,就像两个人在圆形跑道比赛,只要两人有速度差(速度不一样),就绝对会相遇。 只要以相遇,判断相遇时的元素是否为1就行。

代码实现:

class Solution {
public:int compute(int n)//计算n每个位上的平方和{int sum=0;while(n){int tmp = n%10;sum+=tmp*tmp;n/=10;}return sum;}bool isHappy(int n) {int slow =n,fast=compute(n);//初始fast在slow前一个while(slow!=fast){slow=compute(slow);//slow一次走一步fast=compute(compute(fast));//fast一次走两步}return fast==1;//相遇时fast或者slow等于1就是快乐数}
};

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

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

相关文章

python界面开发 - OptionMenu菜单

文章目录 1. python图形界面开发1.1. Python图形界面开发——Tkinter1.2. Python图形界面开发——PyQt1.3. Python图形界面开发——wxPython1.4. Python图形界面开发—— PyGTK:基于GTK1.5. Python图形界面开发—— Kivy1.6. Python图形界面开发——可视化工具1.7. …

ABAQUS软件报价费用 abaqus正版购买价格多少钱?

ABAQUS软件可以完成哪些模拟? ABAQUS软件是一套功能强大的工程模拟的有限元软件,其解决问题的范围从相对简单的线性分析到许多复杂的非线性问题。ABAQUS软件中包含了一套丰富的单元库,可模拟任意几何形状;还包含了各种类型的材料…

【学习笔记】计算机视觉深度学习网络模型

这是本人学习计算机视觉CV领域深度学习模型的学习的一点点学习笔记,很多片子没有完成,可以作为学习的参考~

灵神笔记(1)----动态规划篇

文章目录 介绍动态规划入门:从记忆化搜索到递推打家劫舍递归记忆化递归递推滚动变量 背包0-1 背包递归写法记忆化递归 目标和记忆化搜索递推两个数组一个数组 完全背包记忆化递归搜索 零钱兑换记忆化递归递推 背包问题变形[至多|恰好|至少] 最长公共子序列记忆化搜索…

微信小程序开发系列(二十)·wxml语法·setData()修改对象类型数据、ES6 提供的展开运算符、delete和rest的用法

目录 1. 新增单个、多个属性 1.1 新增单个属性 1.2 新增多个属性 2. 修改单个、多个属性 2.1 修改单个属性 2.2 修改多个属性 3. 优化 3.1 ES6 提供的展开运算符 3.2 Object.assign()将多个对象合并为一个对象 4. 删除单个、多个属性 4.1 删除单个属性 …

搬运机器人助力制造业转型升级

随着传统制造业的转型升级,智能化和多样化成为行业发展的新趋势。在这个过程中,富唯智能搬运机器人作为智能工厂的重要搬运机器人,展现出了卓越的性能和适应性。 它不仅能够应对各种材料、形状和重量的搬运装卸需求,还能与智能物理…

跨链桥的类型总结/相关的名词解释

首先,这是一个会持续更新的文章,我会不断把自己了解到的跨链桥名词解释更新在这里。 跨链桥类型 基于传输方式分类: Lock and Mint:在一条链上锁定资产,在另一条链上铸造等价资产liqidity pool:在不同链…

数字化转型导师坚鹏:金融科技咨询方法论

金融科技咨询方法论 ——方法、做法、演法、心法 课程背景: 数字化转型背景下,很多机构存在以下问题: 不知道先进的金融科技咨询方法论? 不知道如何运作金融科技咨询项目? 不知道如何汇报咨询项目关键成果&…

第五十一回 李逵打死殷天赐 柴进失陷高唐州-AI发展历程和常用框架

朱仝说只要杀了李逵就上梁山,柴进就劝李逵先在庄上住一段时间,先让朱仝、雷横和吴用回了梁山。 李逵在柴进庄上住了一个月,碰到柴进的叔叔柴皇城病重来信叫他去一趟,于是李逵就随着柴进去了高唐州。 柴皇城被殷天锡气死&#xf…

世界级通讯社发稿-法新社海外发稿渠道-大舍传媒

世界级通讯社发稿-法新社海外发稿渠道-大舍传媒 美联社:全球最大的通讯社之一 美联社(Associated Press)是全球最大的通讯社之一,成立于1846年,总部位于美国纽约。该社拥有一支庞大的全球新闻团队,涵盖了…

mysql8安装配置(最新版)

目录 一、下载mysql8 二、安装mysql8 三、配置mysql 一、下载mysql8 下载链接:https://pan.quark.cn/s/58d9072e51c4 二、安装mysql8 双击msi文件 选择custom 根据所需选择组件 修改安装路径 选中execute,安装,弹出提示安装VS的提示框之后…

MYSQL5.7报1205 - Lock wait timeout exceeded; try restarting transaction

简介 今天使用navicate操作添加时,mysql报错误,错误如下 原因 这个问题的原因是在mysql中产生了事务A,执行了修改的语句,比如: update t1 set aget18 where id1;此时事务并未进行提交,事务B开始运行&am…

自学高效备考2024年AMC10:2000-2023年1250道AMC10真题解析

我们今天继续来随机看5道AMC10真题,以及详细解析,这些题目来自1250道完整的官方历年AMC10真题库。通过系统研究和吃透AMC10的历年真题,参加AMC10的竞赛就能拿到好名次。 即使不参加AMC10竞赛,初中和高中数学一定会学得比较轻松、…

PTA L2-001 紧急救援

作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候,你的任务是带领你的…

openGauss学习笔记-237 openGauss性能调优-SQL调优-SQL执行计划介绍-概述

文章目录 openGauss学习笔记-237 openGauss性能调优-SQL调优-SQL执行计划介绍-概述237.1 SQL执行计划概述237.1.1 执行计划显示信息 openGauss学习笔记-237 openGauss性能调优-SQL调优-SQL执行计划介绍-概述 237.1 SQL执行计划概述 SQL执行计划是一个节点树,显示o…

Redis核心数据结构之SDS和链表(三)

SDS与C字符串的区别 二进制安全 C字符串中的字符必须符合某种编码(比如ASCII),并且除了字符串的末尾之外,字符串里面不能包含空字符,否则最先被程序读入的空字符将被误认为是字符串结尾,这些限制使得C字符串只能保存文本数据,而…

Flyway 9.22.3 + springboot3 + MySQL8.0+,简单使用

文章目录 flyway的依赖配置ieda 启动!!! 关于这篇文章主要是自己在使用flyway时遇到的一些问题以及最终的解决方法 当然包括所有的配置,主要目的是记录一下防止下次使用的时候忘记 flyway的依赖 这里 springboot 3 具体版本不再描…

#define MODIFY_REG(REG, CLEARMASK, SETMASK)

#define MODIFY_REG(REG, CLEARMASK, SETMASK) WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK))) 这个宏 MODIFY_REG 是在嵌入式编程中,它用于修改一个寄存器的特定位,而不影响其他位。这个宏接受三个参数&#xff…

中小企业如何降低网络攻击和数据泄露的风险?

德迅云安全收集了Bleeping Computer 网站消息, Arctic Wolf 表示 Akira 勒索软件组织的攻击目标瞄准了中小型企业,自 2023 年 3 月以来,该团伙成功入侵了多家组织,索要的赎金从 20 万美元到 400 多万美元不等,如果受害…

leetcode2

翻转链表 struct ListNode* reverseList(struct ListNode* head) {struct ListNode* prev NULL;struct ListNode* curr head;while (curr ! NULL) {struct ListNode* nextTemp curr->next;//nextTemp的作用是为了记录,以便再反转后可以curr->next prev; …