1. 程式人生 > >【JS】卡牌分組 #陣列 #數學

【JS】卡牌分組 #陣列 #數學

給定一副牌,你需要將整副牌分成 1 組或多組。

要求:

每組牌數量相等、組內每張牌數字相等,

僅當你可選的 X >= 2 時返回 true。

輸入:[1,2,3,4,4,3,2,1] , 輸出:true
解釋:可行的分組是 [1,1],[2,2],[3,3],[4,4]
輸入:[1,1,2,2,2,2] , 輸出:true
解釋:可行的分組是 [1,1],[2,2],[2,2]
輸入:[1,1,1,2,2,2,3,3] ,輸出:false
解釋:沒有滿足要求的分組。



解法一:

就是找一個集體公約數,

收集每張牌的數量存入新陣列 arr ,

公約數 x 從2 往上累加 ,最大不超過 min(arr)

判斷 arr[i] 能否被 x 整除

// 2018 /11/25 Sun 下午


    var obj={}, max, min , arr=[], n=0
    if(deck.length<2) return false;
    for(var i=0;i<deck.length;i++){
        if(obj[deck[i]]>0){
            obj[deck[i]]+=1
        }else {
            obj[deck[i]]=1
        }
    }
    for( i in obj){
        arr[n]=obj[i]
        n++
    }
    min=Math.min.apply(null,arr)
    max=Math.max.apply(null,arr)

    if((min==1 && min!=max) || deck.length<2) return false;


    var x=2,status
    while(min>=x){
        status=0
        for(var i=0;i<arr.length;i++){
            if(arr[i]%x!=0) status=1
        }
        if(status==0) return true;
        x++;
    }
    
    return  false ;
};

69 / 69 個通過測試用例
執行用時:76 ms

在這裡插入圖片描述