力扣202(java&python)-快乐数(简单)
题目:
编写一个算法来判断一个数 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
来源:力扣(LeetCode)
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
快慢指针:创建一个慢指针,每次走一步,再创建一个快指针,每次走两步,当快慢指针相遇时,代表形成了环路,这个数字就不是快乐数【有环的话一定会相遇的原因:快指针每走一步,在他们移动方向上,快指针就会向慢指针靠近一个结点】,如果指针移动过程中,找到了1,则当前是一个快乐数。
举例:n = 116,运用官方图解
1.初始值slow = 116, fast = SquareSum(116)=38;

2.fast != 1 && slow != fast,继续向前,slow= SquareSum(116)=38,fast=SquareSum(SquareSum(38))=58;

3.fast != 1 && slow != fast,继续向前,slow= SquareSum(38)=73,fast=SquareSum(SquareSum(58))=145;

4.fast != 1 && slow != fast,继续向前,slow= SquareSum(73)=58,fast=SquareSum(SquareSum(145))=20;

5.fast != 1 && slow != fast,继续向前,slow= SquareSum(58)=89,fast=SquareSum(SquareSum(20))=16;

6.fast != 1 && slow != fast,继续向前,slow= SquareSum(89)=145,fast=SquareSum(SquareSum(16))=58,这时又遇到58,又会继续循环;

7.开始和上一个58一样的循环,fast != 1 && slow != fast,继续向前,slow= SquareSum(145)=42,fast=SquareSum(SquareSum(58))=145;

8.fast != 1 && slow != fast,继续向前,slow= SquareSum(42)=20,fast=SquareSum(SquareSum(145))=20,这时快慢指针相遇,形成环路,说明116并不是一个快乐数,不会再遇到1;

java代码:
1 class Solution {
2 public int SquareSum(int n){
3 int sum = 0;
4 while(n > 0){
5 int d = n % 10;
6 sum += d * d;
7 n /= 10;
8 }
9 return sum;
10 }
11
12 public boolean isHappy(int n) {
13 int slow = n, fast = SquareSum(n);
14 while(fast != 1 && slow != fast){
15 slow = SquareSum(slow);
16 fast = SquareSum(SquareSum(fast));
17 }
18 return fast == 1;
19 }
20 }
python3代码:
1 class Solution:
2 def isHappy(self, n: int) -> bool:
3 def SquareSum(n):
4 sum = 0
5 while n > 0:
6 d = n % 10
7 sum += d * d
8 n //= 10
9 return sum
10
11 slow = n
12 fast = SquareSum(n)
13 while fast != 1 and slow != fast:
14 slow = SquareSum(slow)
15 fast = SquareSum(SquareSum(fast))
16 return fast == 1
2023-05-09:
哈希表:
1 class Solution {
2 public boolean isHappy(int n) {
3 HashSet<Integer> set = new HashSet<>();
4 while (n != 1 && !set.contains(n)){
5 set.add(n);
6 n = getnext(n);
7 }
8 return n == 1;
9 }
10 public int getnext(int n){
11 int res = 0;
12 while (n != 0){
13 int temp = n % 10;
14 res += temp * temp;
15 n /= 10;
16 }
17 return res;
18 }
19 }
力扣202(java&python)-快乐数(简单)的更多相关文章
- 力扣 —— Two Sum ( 两数之和) python实现
题目描述: 中文: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利 ...
- [LeetCode] 202. Happy Number 快乐数
Write an algorithm to determine if a number is "happy". A happy number is a number defined ...
- 202 Happy Number 快乐数
写一个算法来判断一个数是不是“快乐数”.一个数是不是快乐是这么定义的:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,或是无限循环但始终变不到 1.如 ...
- leetcode python快乐数
编写一个算法来判断一个数是不是“快乐数” “快乐数”的定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复该过程直到为1,也可能是无限循环但始终变不到1. 如果可以变为1,那 ...
- 力扣题目汇总(丑数,重复N的元素,求众数)
丑数 1.题目描述 编写一个程序判断给定的数是否为丑数. 丑数就是只包含质因数 2, 3, 5 的正整数. 示例 1: 输入: 6 输出: true 解释: 6 = 2 × 3 示例 2: 输入: 8 ...
- 力扣(LeetCode)平方数之和 个人题解
给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c. 示例1: 输入: 5 输出: True 解释: 1 * 1 + 2 * 2 = 5 示例2: 输入: 3 ...
- 力扣(LeetCode)两数相加 个人题解
给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...
- 力扣(LeetCode)202. 快乐数
编写一个算法来判断一个数是不是"快乐数". 一个"快乐数"定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 ...
- 力扣Leetcode 202. 快乐数 -快慢指针 快乐就完事了
快乐数 编写一个算法来判断一个数 n 是不是快乐数. 「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不 ...
- Java实现 LeetCode 202 快乐数
202. 快乐数 编写一个算法来判断一个数是不是"快乐数". 一个"快乐数"定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过 ...
随机推荐
- 数组动态表单验证,添加数组,逆序添加,表单验证会错位,发现是key的默认index问题,还有验证trigger问题,添加数据会爆红
数组动态表单验证,添加数组,逆序添加,表单验证会错位,发现是key的默认index问题,还有验证trigger问题,添加数据会爆红 解决方案: trigger: 'blur,change' 换 tri ...
- python计算二进制bin文件hash值
一 hash的价值 hash值的唯一性仅仅在是同一个文件的情况下得到了同样的hash值,而哪怕错误一个字节也会得到不一样的hash值. hash值得最大价值就是唯一性.这样在bin文件检查和校验这块用 ...
- 音频wav文件转sbc工具wav2sbc下载
前记: 书到用时方恨少,工具用时方才发现好不到.为了一个工具,也是折腾了有一阵了. 工具说明: 在耳机中,各大芯片公司为了节省内存,本地播放的一般都是sbc格式文件,这就用到了wav转sbc文件的软件 ...
- 看看谷歌如何在目标检测任务使用预训练权值 | CVPR 2022
论文提出能够适配硬件加速的动态网络DS-Net,通过提出的double-headed动态门控来实现动态路由.基于论文提出的高性能网络设计和IEB.SGS训练策略,仅用1/2-1/4的计算量就能达到静态 ...
- #K-D Tree#洛谷 4357 [CQOI2016]K 远点对
题目 已知平面内 \(n\) 个点的坐标,求欧氏距离下的第 \(k\) 远点对. 分析 先将\(k\)乘2转换为第\(k\)远有序点对. 由于\(O(n^2)\)即枚举一个点再枚举另一个点会超出时限, ...
- FFmpeg开发笔记(十二)Linux环境给FFmpeg集成libopus和libvpx
MP4是最常见的视频封装格式,在<FFmpeg开发实战:从零基础到短视频上线>一书的"1.2.3 自行编译与安装FFmpeg"介绍了如何给FFmpeg集成x264和 ...
- HE琥珀虚颜破解自由安装程序教程(001)
HE琥珀虚颜破解自由安装程序教程(001) 前言 自从狗尾草跑路后,HE琥珀就没法用了,当前APP还没法破解,但是笔者找到了HE琥珀存在的一些漏洞,可以实现安装自己的APP. 所需工具 所需工具 1. ...
- Git 教程:解密 .gitignore 文件、合并分支、解决冲突、及 Git 帮助
Git 帮助 如果你忘记了命令或命令的选项,你可以使用 Git 帮助. 在命令行中,有几种不同的使用帮助命令的方式: git command -help - 查看特定命令的所有可用选项 git hel ...
- 了解 Spring MVC 架构、Dispatcher Servlet 和 JSP 文件的关键作用
Spring MVC 是 Spring 框架的一部分,是一个 Web 应用程序框架.它旨在使用 Model-View-Controller(MVC) 设计模式轻松构建Web应用程序. Spring M ...
- Tailscale 的 TLS 证书过期,网站挂了 90 分钟!
3月7日,基于 WireGuard 的知名 VPN 厂商 Tailscale 的官方网站 tailscale.com 因 TLS 证书过期而中断服务约90分钟. 虽然影响有限,但这起事件还是在 Hac ...