Skip to content
On this page

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
};

技术文档集合