双指针——快乐数

题目

链接:快乐数
在这里插入图片描述

题目解析

根据题目 试着画图找一下规律
在这里插入图片描述

在这个题目中 只有两种情况

  • 最后进入循环 没有1
  • 或者进入循环 有1

鸽巢原理

看到这里肯定会有疑惑,为什么都会进入循环,难道就不会无限不循环吗,这里就要用一个知识来解释为什么一定会有循环了——“鸽巢原理”
在这里插入图片描述

  • 鸽巢原理的简单形式:如果把 n+1个物品放入 n 个盒子中,那么至少有1个盒子包含有2个或更多的物品.(每个盒子必须不为空)

int的最大值
在这里插入图片描述
这里直接再给大一点直接999999999 那么由题目的要求,这算出来为9^2*10 也就是810
也就是int 在这变化的结果肯定实在[1,810]之间 ,那么再超过81次变化之后 一定会出现重复的数,也就是进入循环

算法原理

双指针 ——快慢指针

定义两个快慢指针 slow fast
快的指针走两步 ,慢的指针走一步
那么最终这两个指针会在进入循环后会相遇

如果相遇的位置为1,则说明这个数是快乐数(1的平方还是1,最后left和right指针会停在这里)
如果相遇的位置不为1,则不是快乐数

代码

class Solution {
public://返回每位平方和之和int nsum(int n){int sum = 0;while(n){int x = n%10;sum+=x*x;n/=10;}return sum;}bool isHappy(int n) {int slow = n;int fast = nsum(n);while(slow!=fast){slow = nsum(slow);fast = nsum(nsum(fast));}return slow == 1;}
};
``![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/8ba1fa18f1704bbfa7d26bb3632f79f0.png)

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

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

相关文章

[Linux][简易实现shell]详细解读 + 代码实现

shell执行的命令,通常有两种 第三方提供的,对应在磁盘的可执行程序(由子程序执行)shell内部,自己实现的方法,由自己(父进程)来执行 有些命令是会影响shell本身的如:cd、export(添加环境变量) 思路: 获取命…

分布式技术--------------ELK大规模日志实时收集分析系统

目录 一、ELK日志分析系统 1.1ELK介绍 1.2ELK各组件介绍 1.2.1ElasticSearch 1.2.2Kiabana 1.2.3Logstash 1.2.4可以添加的其它组件 1.2.4.1Filebeat filebeat 结合logstash 带来好处 1.2.4.2缓存/消息队列(redis、kafka、RabbitMQ等) 1.2.4.…

【大语言模型】轻松本地部署Stable Diffusion

硬件要求: 配备至少8GB VRAM的GPU,如果你的电脑只有CPU,请看到最后。根据部署规模,需要足够的CPU和RAM。 软件要求: Python 3.7或更高版本。支持NVIDIA GPU的PyTorch。Hugging Face的Diffusers库。Hugging Face的Tr…

【数据结构】复习题(二)

Hello!大家好,这一篇数据结构复习题是我上个学期复习的时候写的(刚刚在草稿箱发现了!)有一些题目过程都是配了图片的,希望对正在复习数据结构的宝宝们有帮助哦!(还有一个数据结构复习题(一)可以…

Linux驱动中断下半部的三种方法

大家好,今天给大家介绍Linux驱动中断下半部的三种方法,文章末尾附有分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!可进群免费领取。 Linux驱动中断下半部的三种主要方法如下: 软中断&…

java数据结构与算法刷题-----LeetCode693. 交替位二进制数

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 文章目录 位运算 位运算 解题思路:时间复杂度O( 1 1 1)&#…

Open CASCADE学习|实现Extrude功能

首先定义了一些基本的几何元素,如线、圆和平面,然后使用makeExtrudebydir函数来对一个面进行挤出操作。下面是详细过程: 定义Extrude函数:makeExtrudebydir函数接受一个TopoDS_Shape对象和一个gp_Vec对象作为参数。TopoDS_Shape是…

遥感卫星:探索地球的科技之旅

遥感卫星是人类探索地球、理解地球、保护地球的重要工具,其发展历程承载了人类对地球的探索与认知的历程。从最初的概念到如今的高科技应用,遥感卫星技术的发展见证了人类科技的不断进步与创新。 初心萌芽: 遥感卫星的发展始于20世纪中叶&…

Golang | Leetcode Golang题解之第26题删除有序数组中的重复项

题目&#xff1a; 题解&#xff1a; func removeDuplicates(nums []int) int {n : len(nums)if n 0 {return 0}slow : 1for fast : 1; fast < n; fast {if nums[fast] ! nums[fast-1] {nums[slow] nums[fast]slow}}return slow }

window10轻松使用k8s

Docker Desktop安装篇 1、win10安装 1、下载安装包 https://www.docker.com/products/docker-desktop/ 官网下载安装包 2、配置win10支持虚拟化 不勾选Hyper-V&#xff0c;容易出错 3、安装WSL配置window支持linux Windows Subsystem for Linux (WSL) 安装 Linux 子系统&am…

一辆汽车的节拍时间是怎样的?

节拍时间&#xff0c;又称 takt time&#xff0c;是德语中“节奏”的意思。在汽车制造业中&#xff0c;它指的是按照客户需求和生产计划&#xff0c;生产一辆汽车所需的时间。这个时间是固定的&#xff0c;它决定了生产线上每个工序的操作速度和节奏&#xff0c;是生产线上所有…

Fuel tank position

Fuel tank position 汽车油箱位置在哪里&#xff0c;加油的时候就不会听错方向