題目概要
編寫一個函數來判斷數字n
是否是 happy number。
判斷 happy number 的過程:
- 將數字替換為其數字的平方和。
- 重複這個過程,直到數字等於1,或者進入無限循環。
- 若結果為 1 的數為 happy number。
- 若 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 的方式將每個位數平方相加。
程式碼
/** * @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; };
![[JavaScript] LeetCode 202. Happy Number [JavaScript] LeetCode 202. Happy Number](https://i.imgur.com/VxAEqQG.png)
Latest posts by pluto (see all)
- Expo 使用 EAS build 時遇到的坑及解決方式 - 2022 年 5 月 19 日
- Typora + PicGo-Core 使用 Github 作為筆記免費圖床的詳細圖文教學 - 2022 年 5 月 12 日
- [JS學習筆記] JS 中的傳值、傳址與淺拷貝、深拷貝 - 2022 年 5 月 8 日