来源: https://leetcode.com/problems/happy-number
写一个算法来确定一个数字是否“快乐”。
快乐数的定义如下:从任何正整数开始,用数的各位数字的平方的和来代替数字本身。然后一直重复这个过程知道数字等于1,或者它进入其他的死循环,不包括1。如果能得到1则是快乐数。
<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。
然后我们定义一个函数combine,把一个List里面的全部数字的平方和算出来。
然后,我们就不断的调用split和combine,只要数字大于1,我们就split它然后combine,然后看结果是不是1,不是继续split和combine。但是有的时候会遇到死循环,所以我们把这个流程中出现的结果都扔到一个hashset里面,如果发现有重复的,就说明我们开始循环了,那么就退出,返回false即可。而只要数字是1就返回成功。
Github: https://github.com/tinyfool/leetcode/tree/master/src/p0202
本题属于哈希表类题目,想了解更多关于哈希表的题目,可以参看哈希表专题。