Skip to content
On this page

202. 快乐数

原题链接:LeetCode 202. 快乐数

题目描述

编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」 定义为:

- 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。

- 然后重复这个过程直到这个数变为 1,也可能是 **无限循环** 但始终变不到 1。

- 如果这个过程 **结果为** 1,那么这个数就是快乐数。

如果 n快乐数 就返回 true ;不是,则返回 false

示例 1:

**输入:**n = 19 **输出:**true **解释: **12 + 92 = 82 82 + 22 = 68 62 + 82 = 100 12 + 02 + 02 = 1

示例 2:

**输入:**n = 2 **输出:**false

提示:

1 <= n <= 231 - 1

难度: Easy


题解代码

javascript
/**
 * @param {number} n
 * @return {boolean}
 */
// var isHappy = function(n) {
//   let num = n
//   const set = new Set()
//   while(true) {
//       const str = num.toString()
//       let newNum = 0
//       for (let i = 0; i < str.length; i++) {
//           newNum += Number(str[i]) ** 2
//       }
//       if (newNum === 1) return true
//       if (set.has(newNum)) return false
//       set.add(newNum)
//       num = newNum
//   }
// };

var isHappy = function (n) {
    let slow = n
    let fast = next(n)
    while (slow !== fast) {
        slow = next(slow)
        fast = next(next(fast))
    }
    return slow === 1
}

function next(num) {
    const str = num.toString()
    let newNum = 0
    for (let i = 0; i < str.length; i++) {
        newNum += Number(str[i]) ** 2
    }
    return newNum
}

技术文档集合