【JS】卡牌分組 #陣列 #數學
阿新 • • 發佈:2018-11-30
給定一副牌,你需要將整副牌分成 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