题目
给定一副牌,每张牌上都写着一个整数。
此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组:
每组都有 X 张牌。
组内所有的牌上都写着相同的整数。
仅当你可选的 X >= 2 时返回 true。
链接:https://leetcode.cn/problems/x-of-a-kind-in-a-deck-of-cards
解题
function(deck) {
if(deck.length <=1){
return false;
}
let len = deck.length;
let flag = true;
let arr = [];
deck.sort();
for(let i=2;i<=len;i++){
arr = [];
flag = true;
let count = deck.length/i;
//是整数再循环
if(String(count).indexOf('.') ===-1){
for(let j=0;j<count;j++){
let item = deck.slice(j*i,j*i+i);
arr.push(item);
}
//判断arr里面里面的每一项是否都相等
for(let k=0;k<arr.length;k++){
if(new Set(arr[k]).size !==1){
flag = false;
break;
}
}
if(flag){
return true;
}
}
}
return false;
};
解析
1:按题目如果数组的数量小于2,则返回false。
2:把数组分组,可以分成的情况是2-数组的长度。
3:然后分别讨论这些情况,例如按2的长度把数组分组。如果数组的长度可以不能按2进行平均分,那么就不符合要求,重复下上个操作。如果符合操作,那么就开始给数组分组。
4:分组结束后,再判断数组中的每一项是否都相等。