【算法06天:Day6】第三章哈希表 LeetCode 快乐树(202)

73 阅读1分钟

题目三:

image.png

解法一: (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。

image.png

image.png

这样处理好像更方便:

image.png

解法二:(双指针法)

解题思路:题目有两种情况,1、找到快乐数 2、没有快乐数,形成环路,造成死循环。

为了降低空间复杂度,我们可以选择使用快慢指针来解决,流程如下,

1. 创建一个慢指针,一次走一步,再创建一个快指针,一次走两步
2. 当快慢指针相遇,代表形成环路,该数不是快乐数
3. 若指针移动过程中,找到了1,则当前数是一个快乐数

image.png

或者:

image.png

image.png