---
# System prepended metadata

title: 202. Happy Number

---

# 202. Happy Number

## 題目概要

編寫一個函數來判斷數字`n` 是否是 happy number。

判斷 happy number 的過程：

1. 將數字替換為其數字的平方和。
2. 重複這個過程，直到數字等於1，或者進入無限循環。
3. 若結果為 1 的數為 happy number。
4. 若 n 為 happy number 時返回 `true`，如果不是則返回 `false`。

```
Example 1:

Input: n = 19
Output: true
Explanation:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

Example 2:

Input: n = 2
Output: false
```

## 解題技巧

- 可以嘗試先觀察 1 ~ 9 的規律，這之中只有 1, 7 是 happy number，其他都不是。
- 而大於 9 之後的每個數結果都會落在 1 ~ 9 之中。
- 因為 2 ~ 6 都不是 happy number，所以我們可以忽略不算，只計算大於 6 的數字，而如果 n = 1 在 return 的時候就會直接判斷，無須進入循環。
- 用 reduce 的方式將每個位數平方相加。

## 程式碼

```javascript=
/**
 * @param {number} n
 * @return {boolean}
 */
var isHappy = function(n) {
    while (n > 6) {
        n = n.toString().split('').reduce((prev, cur) => prev + Math.pow(cur, 2), 0);
    }
    return n === 1;
};
```

![](https://i.imgur.com/VxAEqQG.png)

