js 的一些題

給出一個區間[a, b],計算區間內「神奇數」的個數。
神奇數的定義:存在不一樣位置的兩個數位,組成一個兩位數(且不含前導0),且這個兩位數爲質數。
好比:153,能夠使用數字3和數字1組成13,13是質數,知足神奇數。一樣153能夠找到31和53也爲質數,只要找到一個質數即知足神奇數。
輸入描述:
輸入爲兩個整數a和b,表明[a, b]區間 (1 ≤ a ≤ b ≤ 10000)。數組

輸出描述:
輸出爲一個整數,表示區間內知足條件的整數個數優化

輸入例子:
11 20code

輸出例子:
6three

在網上看到的一些題,查找神奇數字,以爲蠻有趣,跟小時候作題同樣,其實比較簡單,可是仍是把他記錄下來吧。沒有怎麼優化過,也沒有對邊值和奇怪值進行處理,後續再說吧ip


/**
     * 檢測是否爲質數
     * @param  {[type]} num [description]
     * @return {[type]}     [description]
     */
     function isPrime(num){
         num=parseInt(num);
        //若是能整除2或者5且相加能被3整除都不用循環
        if(num%2===0||num%3===0){
            return false;
        }
        if(num%5===0&&num>=10){
            return false;
        }

        for(var i=3;i<num/2;i++){
            if(num%i===0){
                return false;
            }
        }
        return true;
    }
    /**
     * 排列組合的可能
     * @param  {[type]} num [description]
     * @return {[type]}     [description] 
     * 好比 153 能夠組合成15 13 和 51 53 以及 31 35
     */
    function lineNum(num){
        var stringNum=String(num);
        var numArr=stringNum.split('');
        var numLen=numArr.length;
        var times=numLen*(numLen-1)
        var allNum=[];
        for(var i=0;i<numLen;i++){
            for(var j=0;j<numLen;j++){
                if(j!=i&&numArr[i]!=0){
                    allNum.push(numArr[i]+numArr[j])
                }
            }
        }
        return allNum;

    }
    /**
     * 查找神奇數
     * @param  {[type]} a [description]
     * @param  {[type]} b [description]
     * @return {[type]}   [description]
     */
     function findMagicNum(a,b){
         var allMagics=[];
         var times=0;
         for(var i=a;i<=b;i++){
             if(isPrime(i)&&allMagics.indexOf(i)<0){
                 allMagics.push(i);
                 times++;
             }
             else if(!isPrime(i)){
                 var numLine=lineNum(i)
                 for(var j=0;j<numLine.length;j++){
                     if(isPrime(numLine[j])&&allMagics.indexOf(i)<0){
                         allMagics.push(i);
                         times++;
                     }
                 }
             }

         }
         return {
             allMagics:allMagics,
             num:times
         }
     }
     var obj=findMagicNum(11, 20);
     console.log(obj)

第二道string


牛牛想對一個數作若干次變換,直到這個數只剩下一位數字。
變換的規則是:將這個數變成 全部位數上的數字的乘積。好比285通過一次變換後轉化成285=80.
問題是,要作多少次變換,使得這個數變成個位數。
輸入描述:
輸入一個整數。小於等於2,000,000,000。it

輸出描述:
輸出一個整數,表示變換次數。io

輸入例子:
285console

輸出例子:
2function


var time=1;
     function changeTime(num){
         if(num<10){
             time=0;
         }else{
             var stringNum=String(num);
             var numArr=stringNum.split('');
             var sum=1;
             for(var i=0;i<numArr.length;i++){
                 sum*=numArr[i];
             }
             if(sum>10){
                 time++;
                 changeTime(sum)
             }
         }

         return time;
     }
     console.log(changeTime(2869))

js實現三數之和
給定一個包含 n 個整數的數組 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?找出全部知足條件且不重複的三元組。

注意:答案中不能夠包含重複的三元組。

例如, 給定數組 nums = [-1, 0, 1, 2, -1, -4],

知足要求的三元組集合爲:
[
  [-1, 0, 1],
  [-1, -1, 2]
]
var threeSum = function(nums) {
    var i,j,k,len=nums.length;
    var arr=[],obj={};

    for(i=0;i<len;i++){
        for(j=i+1;j<len;j++){
            for(k=i+2;k<len;k++){
                if(nums[i]+nums[j]+nums[k]===0){
                    var arrItem=[];
                    let itemObj={};
                    arrItem.push(nums[i],nums[j],nums[k]);
                    arrItem.sort(function(a,b){return a-b})
                   
                    let str=arrItem.join();
                    if(!obj[str]){
                        obj[str]=true;
                        arr.push(arrItem)
                    }
                }
                    
               
            }
        }
    }
    return arr
    
};
相關文章
相關標籤/搜索