202. 快樂數 while迴圈找到結束條件
阿新 • • 發佈:2021-12-23
202. 快樂數 while迴圈找到結束條件
檢視原題
解題思路
首先要明白一個數不是快樂數,則其中的計算過程會出現迴圈,要以此為結束條件
- 先將數字的每一項取出來,存到一個數組中,因為會反覆用到,所以建議寫成一個方法 getEachNumber
- 根據得到的數字每一項計算平方和,將其存放到一個數組中 temp
- 先判斷結果是否為 1
- 為 1 則證明是快樂數,返回 true
- 不為1 則繼續判斷temp 是否出現過該數(判斷是否出現了迴圈)
- 如果出現了則返回false ,迴圈結束
- 沒出現過講 n 值更新為上一次計算的各項平凡和,繼續迴圈
程式碼
/** * @param {number} n * @return {boolean} */ var isHappy = function(n) { let temp = []; //存放每一次計算的結果,如果一個數不是快樂數說明到後面會形成迴圈 while (1) { const nums = getEachNumber(n); //將數字每一項放在數組裡; let result = nums.map(item => item ** 2); //將數字每一項平方 let sum = 0; //每一次計算的各項平方和結果 result.forEach(item => sum += item); if (sum === 1) { return true; } if (temp.indexOf(sum) != -1) { // 結果形成了迴圈不會再等於 1 了 return false; } temp.push(sum); n = sum; } }; /** * 取出數字的每一項 * @param {number} n 傳入要處理的數字 * @param {Array} */ function getEachNumber(n) { let nums = []; while (n > 0) { nums.push(Math.floor(n % 10)) n = Math.floor(n / 10) } return nums; }