今天记一道题昂。是力口的
连接: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