LeetCode每日一题之专题一:双指针 ——快乐数

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

题目:

题目分析:
为了房便叙述,将「对于⼀个正整数,每⼀次将该数替换为它每个位置上的数字的平方和」这⼀个
操作记为 x 操作;
题目告诉我们,当我们不断重复 x 操作的时候,计算⼀定会「死循环」,死的方式有两种:
▪ 情况⼀:⼀直在 1 中死循环,即 1 -> 1 -> 1 -> 1...... 
▪ 情况⼆:在历史的数据中死循环,但始终变不到 1 
由于上述两种情况只会出现⼀种,因此,只要我们能确定循环是在「情况⼀」中进行,还是在「情
况⼆」中进行,就能得到结果。
简单证明:
a. 经过⼀次变化之后的最⼤值 9^2 * 10 = 810 ( 2^31-1=2147483647 。选⼀个更⼤的最
⼤ 9999999999 ),也就是变化的区间在 [1, 810] 之间;
b. 根据「鸽巢原理」,⼀个数变化 811 次之后,必然会形成⼀个循环;
c. 因此,变化的过程最终会走到⼀个圈⾥面,因此可以用「快慢指针」来解决。
4. 解法(快慢指针):
算法思路:
根据上述的题目分析,我们可以知道,当重复执行 x 的时候,数据会陷入到⼀个「循环」之中。
⽽「快慢指针」有⼀个特性,就是在⼀个圆圈中,快指针总是会追上慢指针的,也就是说他们总会
相遇在⼀个位置上。如果相遇位置的值是 1 ,那么这个数⼀定是快乐数;如果相遇位置不是 1 
的话,那么就不是快乐数。
补充知识:如何求⼀个数n每个位置上的数字的平方和。
a. 把数 n 每⼀位的数提取出来:
循环迭代下面步骤:
i. int t = n % 10 拿到个位;
ii. n /= 10 噶掉个位;
直到 n 的值变为 0 ;
b. 提取每⼀位的时候,用⼀个变量 sum 记录这⼀位的平方与之前提取位数的平方和
▪ sum = sum + t * t

 

C++:

class Solution
{
public:int bitSum(int n)//返回 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);while (slow != fast){slow = bitSum(slow);fast = bitSum(bitSum(fast));}return slow == 1;}
};

运行结果:

PS:看到这里了,码字不易,给个一键三连鼓励一下吧!有不足或者错误之处欢迎在评论区指出!  

 

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

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

相关文章

win10+Intel显卡安装配置stable-diffusion-webui绘画网页

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目…

基于springboot实现墙绘产品展示交易平台管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现墙绘产品展示交易平台管理系统演示 摘要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本墙绘产品展示交易平台就是在这样的大环境下诞生&…

企业微信企业主体变更认证介绍

企业微信变更主体有什么作用? 说一个自己亲身经历的事情,当时我在一家教育公司做运营,公司所有客户都是通过企业微信对接的。后来行业整顿,公司不得不注销,换了营业执照打算做技能培训,但发现注销后原来的企…

Gitee上传私有仓库

个人记录 Gitee创建账号 以KS进销存系统为例,下载到本地电脑解压。 新建私有仓库 仓库名称:ks-vue3,选择‘私有’ 本地配置 下载安装git配置git 第一次配置可以在本地目录右键【Open Git Bash here】输入【Git 全局设置】再输入【创…

点亮创意:ChatGPT如何搭桥DALL-E图像编辑新纪元

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

RabbitMQ系统监控、问题排查和性能优化实践

一、系统监控:RabbitMQ的各项性能指标及监控 Message Rates:消息率包含了publish,deliver/get,ack等方面的数据,反映了消息在系统中流转的情况。Queue Length:队列长度反映了系统当前的负载情况。如果队列…

【跟小嘉学 Linux 系统架构与开发】四、文件和目录的权限

系列文章目录 【跟小嘉学 Linux 系统架构与开发】一、学习环境的准备与Linux系统介绍 【跟小嘉学 Linux 系统架构与开发】二、Linux发型版介绍与基础常用命令介绍 【跟小嘉学 Linux 系统架构与开发】三、如何查看帮助文档 【跟小嘉学 Linux 系统架构与开发】四、文件和目录的权…

第十一届蓝桥杯物联网试题(省赛)

对于通信方面,还是终端A、B都保持接收状态,当要发送的数组不为空再发送数据,发送完后立即清除,接收数据的数组不为空则处理,处理完后立即清除,分工明确 继电器不亮一般可能是电压不够 将数据加空格再加\r…

前端和后端在软件开发中的两个重要部分

前端和后端是软件开发中的两个重要部分,它们在职责、技术栈和工作重点上都有所不同。以下是前端和后端的主要区别: 职责不同: 前端:前端主要负责用户可以看到的部分,即用户界面(UI)和用户体验&a…

day18java学习打卡:类中属性的使用

/* * 类中属性的使用: * * 属性(成员变量) vs 局部变量 * 1.相同点: * 1.1定义变量的格式:数据类型 变量名变量值; * 1.2先声明,后使用 * 1.3变量都有其对应的作用域 * * * 2.不同点…

Day5:学习尚上优选项目

学习计划:完成尚硅谷的尚上优选项目 学习进度:尚上优选项目 知识点: 四、 搭建平台管理端前端环境 SpringCloud相关概念 微服务的由来微服务本质什么样的项目适合微服务微服务开发框架什么是Spring CloudSpring Cloud和Spring Boot是什么关…

数据库更新两张相关联的表

在SQL Server中,更新两张相关联的表是经常需要的操作,以下是一些更新两张表的不同写法示例: 假设我们有两张表 Employees 和 SalaryUpdates,我们想要根据 SalaryUpdates 中的新工资来更新 Employees 表中的工资。 使用内连接&…

4.4java学习总结

包装类 java给出了一组包装类可以将基本数据类型包装成对象,分别为Byte、Short、Integer、Long、Float、Double、Character、Boolean,对应不同的基本数据类型。 基本数据类型 包装类 int Integer char long Character Long float Float double …

【python实战】--提取所有目录下所有Excel文件指定列数据

系列文章目录 文章目录 系列文章目录前言一、问题描述二、python代码1.引入库 总结 前言 一、问题描述 需要提取指定路径下所有excel文件中指定一列数据,汇总到新文件,(逐列汇总) 二、python代码 1.引入库 代码如下&#xff08…

UE4_X光效果设置_法线图影响透明度

UE4_X光效果设置_法线图影响透明度 2019-03-22 13:37 Exponentin 设置轮廓光扩散度 baseReflectFactionIn 设置内部黑色的亮度值。nromal,连接应用一张法线图,Lerp两色插值,给两个数值,制造一个渐变。 法线图影响透明度&#xf…

检查Uniswap V2 和 Uniswap V3 之间的价格差异 获取套利可能性数据

这段代码是使用Uniswap V2 Router 2合约中的`getAmountsOut`函数来计算输入代币数量对应的输出代币数量。让我来解释一下具体的含义: - `uniswapv2_router2_contract`是一个与Uniswap V2 Router 2合约进行交互的Python对象。 - `functions.getAmountsOut`是合约中的一个函数,…

在一套Dockerfile中完成编译和运行环境部署

大纲 解释型语言编译环境解释环境编译型语言编译环境运行环境 方法编译环境安装系统安装编译依赖下载代码特殊处理(可以忽略)编译准备(可以忽略)编译打包依赖(编译结果) 运行环境安装操作系统安装运行时依赖…

Leetcode 39. 组合总和

心路历程: 这道题就差把回溯算法写在题面上了,其实这道题如果不是要遍历所有的可能情况,而是求某个最大最小值的话,就是一道经典的完全背包问题了。 这道题有一个注意的点,就是如何通过‘控制候选集合’来实现‘不重复…

Android java基础_类的继承_android 类继承(2)

运行结果:rootubuntu:/home/topeet/guyilian# javac Ext2.java rootubuntu:/home/topeet/guyilian# java Ext2 10 ustc **子类继承父类的方法和属性都可以进行覆写,我们在子类覆写父类的printInfo方法。**class Person { private int age; public void …

mysql 约束 索引

约束 约束是用来对数据业务规则和数据完整性进行实施、维护。约束的作用范围仅限在当前数据库,约束可以被当做数据库对象来处理,它们具有名称和关联模式,是逻辑约束,不会因为设置约束而额外占用空间。 1.数据完整性(Data lntegrity)是指数据的精确性(Accuracy)和可靠性(Re…