Are you happy today?快乐数
我是一个从汽车行业转行IT的项目经理,我是Edward,如想了解更多,请关注我的公众号【转行项目经理的逆袭之路】。今天是五一长假前的最后一天,其实想想,对于有稳定工作的人来说,今年也真是爽,上半年假就像休不完一样,连leetcode的每日一题在今天都抛出了快乐数这个题,让我们一起来看看吧。
202. 快乐数
编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。
如果 n 是快乐数就返回 True ;不是,则返回 False 。
示例:
输入:19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
分析
将题目分为两个问题,1.各位数平方之和的算法 2.无限循环如何处理
第一个问题很简单,第二个问题就有点棘手了,好在我们可以查百度:
不是快乐数的数称为不快乐数(unhappy number),所有不快乐数的数位平方和计算,最後都会进入 4 → 16 → 37 → 58 → 89 → 145 → 42 → 20 → 4 的循环中。
用一句话形容就是:每个快乐数都有相同的happy ending,而每个不快乐数都在不快乐中无限循环。
思路
既然知道了不快乐数的各位数平方和会形成一个环,那么我们就可以用快慢指针来解决,慢的走一步,快的走两步,循环一次就相遇,慢指针遍历了所有结点,如果相遇时慢指针不为1则不是快乐数(注意:如果在中间出现1,后面的所有平方和均会是1)。
关于快慢指针,是解决链表问题的经典方法,具体可以参看这篇文章:
https://www.cxyxiaowu.com/7913.html
实现
package algorithm;
/*** 202. Happy Number* Input: 19
Output: true
Explanation:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
* @author EP
* @date 2020年4月30日
* @version 1.0*/public class Solution_isHappy {public static void main(String[] args) {int n = 19;System.out.println(isHappy(n));}public static boolean isHappy(int n) {//快慢指针,相遇即为一次循环,为1则永远为1int slow = n; int fast =squareSum(n);while (slow!=fast) {//fast每次都快走一步slow = squareSum(slow);fast=squareSum(squareSum(fast));}return slow==1;}public static int squareSum(int n) {int sum=0;while (n>0) {int digit = n%10;sum+=digit*digit;n/=10;}return sum;}}
好了,告诉我,今天你快乐了吗?
Are you happy today?快乐数相关推荐
- LeetCode实战:快乐数
题目英文 Write an algorithm to determine if a number is "happy". A happy number is a number de ...
- 快乐数(最终要变成1)
编写一个算法来判断一个数 n 是不是快乐数. 「快乐数」定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和. 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 ...
- 算法----------快乐数 (Java版本)
编写一个算法来判断一个数 n 是不是快乐数.「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1.如 ...
- LeetCode 快乐数(Happy Number)
题目描述 编写一个算法来判断一个数是不是"快乐数". 一个"快乐数"定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这 ...
- 快乐数(双指针,哈希表)
快乐数 方法一:用哈希表来记录 方法二.双指针 题目:编写一个算法来判断一个数 n 是不是快乐数. 「快乐数」定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和. 然后重复这个过程 ...
- LeetCode Algorithm 202. 快乐数
202. 快乐数 Ideas 快乐数的判断逻辑其实挺简单的,按照定义去循环执行就可以了. 关键是如果不是快乐数怎么结束循环. 我们猜测会有以下三种可能: 最终会得到 1 最终会进入循环 值会越来越大, ...
- lintcode-【简单题】快乐数
题目: 写一个算法来判断一个数是不是"快乐数". 一个数是不是快乐是这么定义的:对于一个正整数,每一次将该数替换为他每个位置上的数字的平方和,然后重复这个过程直到这个数变为1,或是 ...
- leetcode 202. 快乐数 思考分析(哈希集合与双指针解)
1.题目 编写一个算法来判断一个数 n 是不是快乐数. 「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变 ...
- [Leedcode][JAVA][第202题][快乐数]
[问题描述] 编写一个算法来判断一个数 n 是不是快乐数.「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终 ...
- LeetCode 202. 快乐数(快慢指针)
1. 题目 2. 解题 一个数经过若干次各位数平方和后,会等于它自己 使用类似环形链表的快慢指针法,最终快慢指针相遇,若不为1则是不快乐数 class Solution {public:int bit ...
最新文章
- 【青少年编程】【四级】绘制花瓣
- Facebook的首席技术官:人工智能已用于内容审核,未来会做更多
- windows Server 2003 IIS启用父路径
- 分水岭算法分割图像的原理概述及OpenCV代码实现
- DFT实训教程笔记1(bibili版本)- introduction to DFT DFT Architecture
- 一网打尽,最全面的跨域解决方案来了!
- 从运维角度浅谈MySQL数据库优化
- ORACLE START WITH 语句的树级结构例子
- vux 使用 font-awesome
- linux 安装rpm包时遇到error:Failed dependencies解法方法
- Bug--时区问题导致IDEA连接数据库失败
- 格式工厂 wav 比特率_智能音乐格式转换
- cad插件加载bplot成功用不了_Batchplot批量打印命令无效,对照情况进行解决
- 互联网数据响应时间计算公式
- iOS开发iPhone竖屏icon尺寸与启动页尺寸汇总
- 数据赋能:Uber的数据治理实践分享
- Java创建对象的四种方法
- 读aroundall的回复有感
- 坦克大战java(章程)
- 软件产品案例分析——福州大学微信小程序
热门文章
- java junit 怎么写_java-如何确定代码是否在JUnit测试内运行?
- R语言实现决策回归树的包rpart
- Error:Android Source Generator: [sdk] Android SDK is not specified.
- 声卡常见故障解决方法
- 【Day63】PHP支付宝服务窗API接口的开发
- JAVA—— Redis基础
- 智能在线整体防雷系统解决方案
- 【安全知识分享】厨房安全知识培训(42页).pptx(附下载))
- 在项目中学习.NET的json(二)之运费计算器
- Unity Shader 视差映射