Skip to content

力扣链接: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;
}