leetcode-202-快乐数

157 阅读1分钟

image.png

leetcode原题

解题方法一

如果能够判断出n的数字平方和在之前出现过,那就代表陷入无限循环中,既不是一个快乐数,这里使用Set来记录这个判断是否出现重复值

var isHappy = function(n) {
   const record = new Set()
    while(n !== 1 && !record.has(n)) {
        record.add(n)
        n = getNext(n)
    }
    return n === 1
};

var getNext = function(n) {
    let sum = 0 
    while(n) {
        sum += (n%10) ** 2
        n = Math.floor(n/ 10)
    }
    return sum
}

解题方法二

使用类似快慢指针来判断是否有重复值

var isHappy = function(n) {
    let slow = n
    let fast = getNext(n)

    while ( fast !== slow && fast !== 1) {
        slow = getNext(slow)
        fast = getNext(getNext(fast))
        
    }
    return fast === 1
};

var getNext = function(n) {
    return n.toString().split('').map(el => parseInt(el) ** 2).reduce((a,b) => a + b)
}