202.快乐数

47 阅读1分钟

思路

将n为链表的表头,后面位数的平方和未其next 如果是无限循环那么必定会相遇

代码

   let isHappy = function (n) {
            let p1 = n;
            let p2 = getNext(n);//遇到10的n次方就会五险循环下去,故从next开始而不是n

            while (p2 !== 1) {
                p1 = getNext(p1);
                p2 = getNext(getNext(p2));
                //如果是个环那么说明是无限循环
                if (p1 === p2) {
                    return false;
                }
            }
            return p2 === 1;
        }

        let getNext = function (n) {
            let sum = 0;
            while (n > 0) {
                sum += Math.pow(n % 10, 2);
                n = Math.floor(n / 10);
            }
            return sum;
        }

复杂度

时间:O(n)

空间: O(n);函数套函数