202. 快乐数 JavaScript实现

155 阅读1分钟

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
};