题目三:
解法一: (Set)
解题思路:这个题,就是要一直循环,一直找到结果,或者出现循环的时候截止循环。
题目中说的无限循环的意思可以解释为 sum 最后都会是一样的,因此当sum不变时,便return false。
将每一次的sum都存入 Set 中,如果等于 1,则返回 true,否则判断 sum 是否已经在 Set 中,如果已经
在,则表示已经处于无限循环中,return false,如果不存在,则将 sum 加入 Set 中。
尤其需要注意的是,在 js 中不能直接写 n = n / 10,要写 n = Math.floor(n / 10),js中 5 / 2 === 2.5。
这样处理好像更方便:
解法二:(双指针法)
解题思路:题目有两种情况,1、找到快乐数 2、没有快乐数,形成环路,造成死循环。
为了降低空间复杂度,我们可以选择使用快慢指针来解决,流程如下,
1. 创建一个慢指针,一次走一步,再创建一个快指针,一次走两步
2. 当快慢指针相遇,代表形成环路,该数不是快乐数
3. 若指针移动过程中,找到了1,则当前数是一个快乐数
或者: