力扣链接:202.快乐数
难度:⭐
解题关键词:快慢指针
解题思路:如果是一个快乐数,那么最后会回到 1,如果是一个非快乐数,最后会回到本身。我们用一个快慢指针,慢指针每次执行一次,快指针每次执行两次,直到最后快慢指针相遇。最后判断快指针是否等于 1。
typescript
const bitSquareSum = (num: number) => {
let sum = 0;
while (num > 0) {
const bit = num % 10;
sum += bit * bit;
num = Math.floor(num / 10);
}
return sum;
};
function isHappy(n: number): boolean {
let slow = n;
let fast = bitSquareSum(n);
while (fast !== 1 && slow !== fast) {
slow = bitSquareSum(slow);
fast = bitSquareSum(bitSquareSum(fast));
}
return fast === 1;
}