快乐数
对于一个正整数,每一次将该数替换为它每个位置上数字的平方和,如果重复这个过程可以得到最后的结果为1,那么就是快乐数,否则不是。
解题思路一:将题目转换为判断链表是否有环
如果遍历某个节点为1说明没环,是快乐数。如果遍历到重复的节点值,说明有环,就不是快乐数。
思路一:JS代码实现
var isHappy = function(n) {
let p = n; // 慢指针
let q = n; // 快指针
do {
p = getNext(p); // 走一步
q = getNext(getNext(q)) // 走两步
} while (p !== q && q !== 1);
return q === 1; // 如果等于1代表是快乐数,如果不是,那么代表p,q相遇,所以不是。
};
var getNext = function(n){
let squareSum = 0;
while (n) {
squareSum += (n % 10) * (n % 10); // 获取平方和
n = Math.floor(n / 10); // 每循环一次,除去10,数字进一。如123 -> 12.3 -> 1.23 ,由于有小数位,所以向下取整
}
return squareSum;
}