转载

LeetCode 第202题 Happy Number Java

来源: https://leetcode.com/problems/happy-number

题目:快乐数

写一个算法来确定一个数字是否“快乐”。

快乐数的定义如下:从任何正整数开始,用数的各位数字的平方的和来代替数字本身。然后一直重复这个过程知道数字等于1,或者它进入其他的死循环,不包括1。如果能得到1则是快乐数。

Example: 

<strong>Input:</strong> 19
<strong>Output:</strong> true
<strong>Explanation: 
</strong>1<sup>2</sup> + 9<sup>2</sup> = 82
8<sup>2</sup> + 2<sup>2</sup> = 68
6<sup>2</sup> + 8<sup>2</sup> = 100
1<sup>2</sup> + 0<sup>2</sup> + 0<sup>2</sup> = 1

我们首先定义一个函数split,它可以把一个数字的每个位分离出来,形成一个List。

LeetCode 第202题 Happy Number Java

然后我们定义一个函数combine,把一个List里面的全部数字的平方和算出来。

LeetCode 第202题 Happy Number Java

然后,我们就不断的调用split和combine,只要数字大于1,我们就split它然后combine,然后看结果是不是1,不是继续split和combine。但是有的时候会遇到死循环,所以我们把这个流程中出现的结果都扔到一个hashset里面,如果发现有重复的,就说明我们开始循环了,那么就退出,返回false即可。而只要数字是1就返回成功。

LeetCode 第202题 Happy Number Java

Github: https://github.com/tinyfool/leetcode/tree/master/src/p0202

本题属于哈希表类题目,想了解更多关于哈希表的题目,可以参看哈希表专题。

原文  https://codechina.org/2019/08/leetcode-202-happy-number-java/
正文到此结束
Loading...