1. 程式人生 > 其它 >202. 快樂數 while迴圈找到結束條件

202. 快樂數 while迴圈找到結束條件

202. 快樂數 while迴圈找到結束條件

檢視原題

解題思路

首先要明白一個數不是快樂數,則其中的計算過程會出現迴圈,要以此為結束條件

  1. 先將數字的每一項取出來,存到一個數組中,因為會反覆用到,所以建議寫成一個方法 getEachNumber
  2. 根據得到的數字每一項計算平方和,將其存放到一個數組中 temp
  3. 先判斷結果是否為 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;
}