202. 快乐数
思想:快慢指针+检测环
- 不是快乐数有两种情况:一是构成无限循环,二是没有构成环,但是不会出现数字1
- 第一步:计算n值中每位数字平方和,构成下一个数字。 也就是getNext()函数
- 第二步:进行判断,是否是快乐数,根据不是快乐数的情况,判断条件有两种。
- 形成环,出循环,fast不会为1
- 不形成环,出循环,但是fast不为1
// 计算累加和
var getNext = function(n){
// 先转换为字符串,然后分割为字符串数组。对这个数组中的每个元素平方,最后累加。
return n.toString().split('').map(i=>i**2).reduce((a,b)=>a+b)
}
var isHappy = function(n) {
// 设置快慢指针,检查是否有环
let slow = n, fast = getNext(n)
// 循环检查,不等于1且没有环,就继续前进
while(fast != 1 && fast != slow){
slow = getNext(slow)
fast = getNext(getNext(fast))
}
// 只有当fast=1并且没有环的时候,才会是快乐数
return fast == 1
};