【算法】求快樂數——快不快樂都要記下來

今天記一道題昂。是力口的
連接:https://leetcode-cn.com/probl...算法

反正就是呢有些數它是快樂的,你也不知道爲啥,舉個栗子:微信

輸入:19
輸出:true
解釋:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

定義是:
一個正整數,每一次將該數替換爲它每一個位置上的數字的平方和,而後重複這個過程直到這個數變爲 1,也多是 無限循環 但始終變不到 1。若是 能夠變爲  1,那麼這個數就是快樂數app


來直接上答案,思路在注視裏本身看昂:函數

/**
 * @param {number} n
 * @return {boolean}
 */
var happyMap = {};//全局記錄一下快樂過的數
var unHappyMap = {};//也記錄一下不快樂的數
var bro = {};//預備一個循環中要記錄的當前循環數及衍生數的集合
var _getSum = function(num){
    var arr = (num+'').split('');
    var _sum  = 0;
    for(let i =0;i<arr.length;i++){
        _sum += Math.pow(arr[i],2)
    }

    if(_sum === 1){ //若是是1,直接返回true
        bro[num] = 1; //並將1記錄下來~
        return true;
    }else if(bro[_sum]){ //若是是和當前循環的衍生數中某一個數撞上了,那麼就是個死循環了,馬上返回false
        return false;
    }else if(happyMap[_sum]){ //若是是被記錄爲快樂數,則直接返回true
        return true;
    }else if(unHappyMap[_sum]){ //若是記錄中不快樂,就返回false
        return false;
    }else{ //若是是個新的數,那就將它暫存在循環衍生map中
        bro[num] = 1;
        return _getSum(_sum);
    }
}
var isHappy = function(n) {
    bro = {}; //每一次新的循環,清空一次循環衍生數map
    var _flag = _getSum(n); //執行一次求和函數
    if(_flag){
        //若是是快樂的,那麼此次衍生出的全部數都是快樂的,記錄下來!
        for(let i in bro){
            happyMap[i] = true;
        }
    }else{
        //同理,若是隻要結果不快樂,那過程都記到不快樂吧
        for(let i in bro){
            unHappyMap[i] = true;
        }
    }
    return _flag;
};

微信截圖_20200501002417.png
反正就是還有好多好多思路,反正就是這個算法的速度賊快,且佔用內存賊少(戰勝了辣麼多的人,不知道咋算的,反正是厲害昂,偷笑hhhhhh)
來,原答案在這裏:
https://leetcode-cn.com/probl...spa

相關文章
相關標籤/搜索