公共方法
const toSum = n => String(n).split('').reduce((prev, cur) => prev += Math.pow(+cur, 2),0);
第一种方法: 用数组检测循环
const isHappy = (n) => {
const sumArr = [];
if(n === 1) {
return true;
}
while(true) {
const res = toSum(n);
if(res === 1) {
return true;
}
if(sumArr.includes(res)) {
return false;
}
sumArr.push(res);
n = res;
}
};
第二种方法: 快慢指针法
const isHappy = (n) => {
let slow = n;
let fast = n;
while(true) {
slow = toSum(slow);
fast = toSum(toSum(fast));
if(slow === 1 || fast === 1) {
return true;
}
if(slow === fast) {
return false;
}
}
}
来源