Appearance
914. 卡牌分组
原题链接:LeetCode 914. 卡牌分组
题目描述
给定一副牌,每张牌上都写着一个整数。
此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组:
- 每组都有 `X` 张牌。
- 组内所有的牌上都写着相同的整数。
仅当你可选的 X >= 2 时返回 true。
示例 1:
**输入:**deck = [1,2,3,4,4,3,2,1] **输出:**true **解释:**可行的分组是 [1,1],[2,2],[3,3],[4,4]
示例 2:
**输入:**deck = [1,1,1,2,2,2,3,3] **输出:**false **解释:**没有满足要求的分组。
提示:
1 <= deck.length <= 104
0 <= deck[i] < 104
难度: Easy
题解代码
javascript
/**
* @param {number[]} deck
* @return {boolean}
*/
const hasGroupsSizeX = deck => {
const sortDeck = deck.sort((m , n) => m - n)
const lengthList = []
let length = 1
for (let i = 0; i < sortDeck.length - 1; i++) {
if (i === sortDeck.length - 2) {
lengthList.push(length + 1)
}
if (sortDeck[i + 1] === sortDeck[i]) {
length += 1
} else {
if (length === 1) {
return false
}
lengthList.push(length)
length = 1
}
}
if (lengthList.length === 1 && lengthList[0] > 1) {
return true
}
// 求最大公约数
const gcd = (a, b) => {
if (b === 0) {
return a
} else {
return gcd(b, a % b)
}
}
let gongyueshu
for (let i = 1; i < lengthList.length; i++) {
gongyueshu = gcd(lengthList[i], gongyueshu ? gongyueshu : lengthList[i - 1])
}
return lengthList.length ? gongyueshu > 1 : false
};