1. 快乐树算法
对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
如果 可以变为 1,那么这个数就是快乐数。
如果能够判断出某次的数字平方和在之前的出现过,那就代表已经陷入无限循环当中,既不是一个快乐数。按此思路,判断快乐树,类似于判断链表是否有环,如果有环,则不是,反之则是快乐树。
1.1 利用类似快慢指针的方式判断
var isHappy = function(n) {
let p = n;
let q = getValue(getValue(p));
while(p !== 1 && p !== q) {
p = getValue(p);
q = getValue(getValue(q));
}
return q === 1
function getValue(n) {
let sum = 0;
while(n) {
sum += (n % 10) ** 2;
n = Math.floor(n / 10);
}
return sum;
};
};
1.2 利用Set判断
var isHappy = function(n) {
const set = new Set();
while(n !== 1 && !set.has(n)) {
set.add(n);
n = getValue(n);
}
return n === 1;
function getValue(n) {
let sum = 0;
while(n) {
sum += (n % 10) ** 2;
n = Math.floor(n / 10);
}
return sum;
};
};