今天記一道題昂。是力口的
連接: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; };
反正就是還有好多好多思路,反正就是這個算法的速度賊快,且佔用內存賊少(戰勝了辣麼多的人,不知道咋算的,反正是厲害昂,偷笑hhhhhh)
來,原答案在這裏:
https://leetcode-cn.com/probl...spa