Leetcode11-快乐数(202)

1、题目

编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」 定义为:

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

示例 1:

输入:n = 19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
示例 2:

输入:n = 2
输出:false

提示:

1 <= n <= 231 - 1

2、解

快慢指针法
通过反复调用 getNext(n) 得到的链是一个隐式的链表。隐式意味着我们没有实际的链表节点和指针,但数据仍然形成链表结构。起始数字是链表的头 “节点”,链中的所有其他数字都是节点。next 指针是通过调用 getNext(n) 函数获得。

意识到我们实际有个链表,那么这个问题就可以转换为检测一个链表是否有环。因此我们在这里可以使用弗洛伊德循环查找算法。这个算法是两个奔跑选手,一个跑的快,一个跑得慢。在龟兔赛跑的寓言中,跑的慢的称为 “乌龟”,跑得快的称为 “兔子”。

不管乌龟和兔子在循环中从哪里开始,它们最终都会相遇。这是因为兔子每走一步就向乌龟靠近一个节点(在它们的移动方向上)。
在这里插入图片描述

算法

我们不是只跟踪链表中的一个值,而是跟踪两个值,称为快跑者和慢跑者。在算法的每一步中,慢速在链表中前进 1 个节点,快跑者前进 2 个节点(对 getNext(n) 函数的嵌套调用)。

如果 n 是一个快乐数,即没有循环,那么快跑者最终会比慢跑者先到达数字 1。

如果 n 不是一个快乐的数字,那么最终快跑者和慢跑者将在同一个数字上相遇。

int bitNumberPow(int n)
{int tempSum = 0;//先求每位数的平方和while(n > 0){int temp = n % 10;tempSum += pow(temp, 2);n = n / 10;}return tempSum;
}
bool isHappyA(int n)
{int fast = n;int slow = n;do{fast = bitNumberPow(fast);fast = bitNumberPow(fast);slow = bitNumberPow(slow);} while (fast != slow);return 1 == slow;
}

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

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

相关文章

8K自动化测试面试题分享(有答案,非常详细)

关于自动化测试面试&#xff0c;会问到哪些问题呢&#xff1f;给大家简单总结了一下&#xff0c;每一个都是学员反馈过来的企业真题&#xff0c;相信对大家有帮助&#xff0c;最近有面试机会的&#xff0c;快来背一下答案吧 1、你会封装自动化测试框架吗&#xff1f; 这个问得…

华为月薪25K的自动化测试工程师到底要会那些技能!

​前言 3年自动化测试软件测试工程师职业生涯中&#xff0c;我所经历过的项目都是以自动化测试为主的。由于自动化测试是一个广泛的领域&#xff0c;我将自己的经验整理了一下分享给大家&#xff0c;话不多说&#xff0c;直接上干货。 自动化测试的目标和实践选择合适的自动化…

zookeeper 常见客户端介绍和使用 zkCli、自带API、 zkClient、Curator

文章目录 一、Zookeeper的命令行使用二、Zookeeper自带API的使用2.1 引入API2.1 API简单使用 三、Zookeeper三方客户端zkClient的使用3.1 引入依赖3.2 简单的使用案例四、Curator 客户端框架4.1 引入依赖4.2 简单使用案例 一、Zookeeper的命令行使用 ZooKeeper解压后&#xff…

使用Helmfile 管理helm charts

官网 ## https://github.com/helmfile/helmfile## 参考 https://cloud.tencent.com/developer/article/1766822 介绍 使用helmfile时&#xff0c;我们首先得了解helm的使用&#xff0c;以及如何开发一个helm chart。 helm是kubernetes的包管理工具。在实际的使用场景中我们涉…

分布式(4)

目录 16.分布式缓存可能会存在哪些问题&#xff1f; 17.分布式限流了解过吗&#xff1f; 18.分布式定时任务怎么实现&#xff1f; 19.什么是分布式系统的副本一致性&#xff1f;有哪些&#xff1f; 20.在分布式系统中有哪些常见的一致性算法&#xff1f; 21.谈谈你对一致性…

【排序算法】归并排序与快速排序:深入解析与比较

文章目录 1. 引言2. 归并排序&#xff08;Merge Sort&#xff09;3. 快速排序&#xff08;Quick Sort&#xff09;4. 归并排序与快速排序的比较5. 结论 1. 引言 排序算法是计算机科学中最基本且至关重要的概念之一。它们不仅是理解更复杂算法和数据结构的基石&#xff0c;而且…

面试复盘5——后端开发——一面面经——大厂的面试果然干货满满

前言 本文主要用于个人复盘学习&#xff0c;因此为保障公平&#xff0c;所以本文不指出公司名&#xff0c;题目编号只是为了自己区别而已。对待面经&#xff0c;望读者还是更多从其中学习总结&#xff0c;而不是去碰原题。 面试岗位信息 后端开发秋招&#xff0c;上海某大中…

【Linux Shell】2. Shell 变量

文章目录 【 1. 变量命名规则 】【 2. 变量的使用 】【 3. 只读变量 】【 4. 删除变量 】【 5. 变量类型 】【 6. Shell 字符串 】6.1 字符串的分类6.2 字符串操作 【 7. Shell 数组 】7.1 定义数组7.2 读取数组7.3 获取数组的长度 【 8. Shell 注释 】8.1 单行注释8.2 多行注释…

机器学习的算法简单介绍-朴素贝叶斯算法

朴素贝叶斯网络&#xff08;Naive Bayes Network&#xff09;与贝叶斯网络&#xff08;Bayesian Network&#xff09;有一些不同之处&#xff0c;让我们来澄清一下这两个概念。 贝叶斯网络&#xff08;Bayesian Network&#xff09;&#xff1a;贝叶斯网络是一种用于建模概率关…

Hi5 2.0 虚拟手与追踪器(Tracker)的位置修正

问题描述 使用环境与工具&#xff1a;Unity 2022.3.4fc1&#xff0c;steam VR(2.7.3)&#xff0c;steamvrSDK&#xff08;1.14.15&#xff09;&#xff0c;HTC vive pro专业版&#xff0c;Hi5 2.0数据手套 首先按照Hi5 2.0的使用说明&#xff08;可参考&#xff1a;HI5 2.0 交…

windows 和linux 的区别

目前国内 Linux 更多的是应用于服务器上&#xff0c;而桌面操作系统更多使用的是 Windows。主要区别如下 比较层面WindowsLinux界面界面统一&#xff0c;外壳程序固定所有 Windows 程序菜单几乎一致&#xff0c;快捷键也几乎相同图形界面风格依发布版不同而不同&#xff0c;可…

Netty使用SSL实现双向通信加密

最近项目有个需求,TCP服务器实现基于证书通信加密,之前没做过,花了一些时间调研,今天整理下。 SSL(Secure Sockets Layer 安全套接字协议) 1、原理 算法原理 简而言之就是非对称加密算法 私钥自己持有,公钥发给对方,对方在发送信息的时候使用公钥进行加密数据,当接收到…

C# 数组相关操作

一。int[] 类型数组 1.求int[]数组中的最大值和最小值 int[] intArrnew int[]{ 1,2,3,4,5,-24,66};int a intArr.Max();int b intArr.Min();Console.WriteLine(a); //最大值为66Console.WriteLine(b); //最小值为-24 2.判断int[]数组中是否包含某个值 int[] intArrnew int[]…

IPA打包过程中的Invalid Bundle Structure错误如果解决

在iOS应用程序开发中&#xff0c;打包和发布应用程序是一个必要的步骤。有的时候在打包的过程中可能会遇到一些错误&#xff0c;其中一个比较常见的错误是"Invalid Bundle Structure"。这个错误通常意味着应用程序的文件结构不正确&#xff0c;而导致的无法成功打包应…

ShardingJDBC简单使用

Sharding-JDBC是当当网开源的适用于微服务的分布式数据访问基础类库&#xff0c;完整的实现了分库分表&#xff0c;读写分离和分布式主键功能&#xff0c;并初步实现了柔性事务。Sharding-JDBC定位为轻量级Java框架&#xff0c;在Java的JDBC层提供的额外服务。其适用于任何基于…

【NLP】2024年改变人工智能的前六大NLP语言模型

在快速发展的人工智能领域&#xff0c;自然语言处理已成为研究人员和开发人员关注的焦点。作为这一领域显著进步的证明&#xff0c;近年来出现了几种开创性的语言模型&#xff0c;突破了机器能够理解和生成的界限。在本文中&#xff0c;我们将深入研究大规模语言模型的最新进展…

精准快速定位的locate

精准快速定位的locate Linux locate命令用于查找符合条件的文档、程序、目录等等。这个命令会在数据库中查找符合条件的各种信息。 一般情况我们只需要输入 locate name 即可查找。 官方定义为: locate - list files in databases that match a pattern 使用方法为: $ lo…

ubuntu2204,mysql8.x安装

ubuntu 2204, MySQL8.x安装 sudo apt-get update sudo apt-get upgrade# 习惯性的先设置一下时区,这里我使用东八区 date -R # 若发现时间正常则无需设置tzselect# 依次选择 4 -> 10 -> 1 -> 1cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtimedate -R# 同步时间…

ElementuiPlus文件上传失败原因,一个小坑记录!

记录一个自己犯得错误&#xff0c;一定记住要前后端file名字对应上&#xff01; 原后端代码 RestController RequestMapping("/upload") public class UploadFileController {PostMappingpublic Result upload(MultipartFile multipartFile) throws IOException {S…

简单Diff算法

简单Diff算法 渲染器的核心 Diff算法 解决的问题 比较新旧虚拟节点的子节点&#xff0c;实现最小化更新。 虚拟节点key属性的作用 就像虚拟节点的“身份证号”&#xff0c;在更新时&#xff0c;渲染器会通过key属性找到可复用的节点&#xff0c;然后尽可能地通过DOM移动操…