首页 > 编程语言 >力扣202(java&python)-快乐数(简单)

力扣202(java&python)-快乐数(简单)

时间:2022-09-29 11:57:45浏览次数:39  
标签:slow java 58 SquareSum python fast int 202 &&

题目:

编写一个算法来判断一个数 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)
链接:https://leetcode.cn/problems/happy-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

快慢指针:创建一个慢指针,每次走一步,再创建一个快指针,每次走两步,当快慢指针相遇时,代表形成了环路,这个数字就不是快乐数【有环的话一定会相遇的原因:快指针每走一步,在他们移动方向上,快指针就会向慢指针靠近一个结点】,如果指针移动过程中,找到了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

标签:slow,java,58,SquareSum,python,fast,int,202,&&
From: https://www.cnblogs.com/liu-myu/p/16740908.html

相关文章

  • Java基础Day5-数组
    一、数组声明创建首先必须声明数组变量,才能在程序中使用数组。声明数组变量的语法如下:dataType[]arrayRefVar;例如:int[]nums;Java语言使用new操作符来创建数组......
  • Illustrator 2022 for mac (AI 2022中文版)
    mac版AdobeIllustrator2022版已经上线,Adobeillustrator,常被称为“AI”,借助这款行业标准的矢量图形软件,您可以制作适用于印刷、Web、视频和移动设备的徽标、图标、绘图、......
  • python sympy模块计算 Clebsch-Gorden 系数
    角动量代数还是挺常用的,今天本想自己写一个python的CG系数函数,又觉得可能已经有现成的包了。google搜了一下,第一条就是sympy官网的相关文档,快准爽。学习了一下官网......
  • MySQL--SQL基础语句--2022年9月28日
    第一节  数据库相关概念 第二节  MySQL安装及启动1、MySQL安装及启动自行查看文档,这里不多笔记2、关系型数据库是什么 3、数......
  • java_day02
    Java基础注释注释并不会被执行,可以帮助我们更好的理解代码书写注释是一个好习惯***Java注释有三种***单行注释使用双斜杠//idea快捷键为ctrl+/多......
  • 代码随想录day6● 哈希表理论基础 ● 242.有效的字母异位词 ● 349. 两个数组的
     哈希表理论基础 C++STL无序容器种类和关联式容器一样,无序容器只是一类容器的统称,其包含有4个具体容器,分别为 unordered_map、unordered_multimap、unordered_set......
  • Java 代码优化技巧合集:如何节约时间和空间
    JavaPerformance:reducingtimeandspaceconsumption一篇关于如何优化Java代码的文章,提供了很多很有用的小技巧。 原文地址:http://www.itu.dk/people/sestoft/pape......
  • 2022.9.29-周四-九月第四周
     公式化生活的,真的过够了 作词:潘云安作曲:潘云安编曲:告五人形同虚设的时间在你眼里成为了无限青春充满了不眠是为了追寻更多的明天好似无尽的灯街从不分你我......
  • VS2022/VS2019安装WinForm打包程序,Microsoft Visual Studio Installer Projects 2022
    问题:使用VS2022创建WinForm程序,完了需要打包成安装程序,这时候我去下载MicrosoftVisualStudioInstallerProjects2022插件,速度超级慢,恶心人。总算是下载下来了,我存到我......
  • JavaScript构造函数
    一、什么是构造函数 构造函数(Constructor)的创建方式和普通函数一样。但通常首字母进行大写,用于和普通函数区分。 但是当一个函数创建好以后,我们并不知道它是不是构造......