题目:

编写一个算法来判断一个数 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)-快乐数(简单)的更多相关文章

  1. 力扣 —— Two Sum ( 两数之和) python实现

    题目描述: 中文: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利 ...

  2. [LeetCode] 202. Happy Number 快乐数

    Write an algorithm to determine if a number is "happy". A happy number is a number defined ...

  3. 202 Happy Number 快乐数

    写一个算法来判断一个数是不是“快乐数”.一个数是不是快乐是这么定义的:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,或是无限循环但始终变不到 1.如 ...

  4. leetcode python快乐数

    编写一个算法来判断一个数是不是“快乐数” “快乐数”的定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复该过程直到为1,也可能是无限循环但始终变不到1. 如果可以变为1,那 ...

  5. 力扣题目汇总(丑数,重复N的元素,求众数)

    丑数 1.题目描述 编写一个程序判断给定的数是否为丑数. 丑数就是只包含质因数 2, 3, 5 的正整数. 示例 1: 输入: 6 输出: true 解释: 6 = 2 × 3 示例 2: 输入: 8 ...

  6. 力扣(LeetCode)平方数之和 个人题解

    给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c. 示例1: 输入: 5 输出: True 解释: 1 * 1 + 2 * 2 = 5 示例2: 输入: 3 ...

  7. 力扣(LeetCode)两数相加 个人题解

    给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...

  8. 力扣(LeetCode)202. 快乐数

    编写一个算法来判断一个数是不是"快乐数". 一个"快乐数"定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 ...

  9. 力扣Leetcode 202. 快乐数 -快慢指针 快乐就完事了

    快乐数 编写一个算法来判断一个数 n 是不是快乐数. 「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不 ...

  10. Java实现 LeetCode 202 快乐数

    202. 快乐数 编写一个算法来判断一个数是不是"快乐数". 一个"快乐数"定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过 ...

随机推荐

  1. 【VMware vSAN】全新vSAN 8 ESA快速存储架构配置文件服务并创建文件共享。

    早在2020年,VMware就发布了vSphere7.vSAN7.VCF4等等产品的更新,当时随着云原生的火热,基于容器技术的现代应用程序快速发展,Docker.Kubernetes这些容器平台被广泛 ...

  2. Solon Web 文件上传的最佳实践

    文件上传是 Web 开发中最常见的一个应用场景.一般在处理数据时,会有两种常见的方案:直接把文件流放在内存里,或者把文件流先缓冲到磁盘. 1.如果是高频且文件极小 使用纯内存模式,默认即可.如果高频小 ...

  3. spring redis 工具类

    import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Map; ...

  4. KingbaseES Json 系列九:Json路径查询函数

    KingbaseES Json 系列九--Json路径查询函数(JSONB_PATH_EXISTS,JSONB_PATH_MATCH,JSONB_PATH_QUERY,JSONB_PATH_QUERY ...

  5. KingbaseES PLSQL 支持语句级回滚

    KingbaseES默认如果在PLSQL-block 执行过程中的任何SQL 语句导致错误,都会导致该事务的所有语句都被回滚,而Oracle 则是语句级的回滚.KingbaseES 为了更好的与 Or ...

  6. Scala 不可变Map

    1 package chapter07 2 3 object Test08_ImmutableMap { 4 def main(args: Array[String]): Unit = { 5 // ...

  7. 使用site-maven-plugin在github上搭建公有仓库

    目录 简介 前期准备 在maven中配置GitHub权限 配置deploy-plugin 配置site-maven-plugin 怎么使用这个共享的项目 总结 简介 Maven是我们在开发java程序 ...

  8. Python制作词云--stylecloud简单使用

    安装 pip install stylecloud 使用 from stylecloud import gen_stylecloud gen_stylecloud('zhangsan lisi wan ...

  9. 模拟spring工作原理

    1.配置文件 Service=service.Impl.ServiceImpl saveDao=dao.daoImpl.saveDaoImpl 2.模拟业务层 --接口 Service package ...

  10. 打造HarmonyOS智能全场景,7大BUFF为您助力!

    <HarmonyOS Connect系列课>上线,7套课程教会开发者打造智能全场景: <HarmonyOS Connect系列课>共含7套课程,按照业务流程先后分别为--Dev ...