LeetCode 914. 卡牌分组

简介: LeetCode 914. 卡牌分组

LeetCode 914. 卡牌分组


Table of Contents

一、中文版

二、英文版

三、My answer

四、解题报告


一、中文版

给定一副牌,每张牌上都写着一个整数。

此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组:

每组都有 X 张牌。

组内所有的牌上都写着相同的整数。

仅当你可选的 X >= 2 时返回 true。

 

示例 1:

输入:[1,2,3,4,4,3,2,1]

输出:true

解释:可行的分组是 [1,1],[2,2],[3,3],[4,4]

示例 2:

输入:[1,1,1,2,2,2,3,3]

输出:false

解释:没有满足要求的分组。

示例 3:

输入:[1]

输出:false

解释:没有满足要求的分组。

示例 4:

输入:[1,1]

输出:true

解释:可行的分组是 [1,1]

示例 5:

输入:[1,1,2,2,2,2]

输出:true

解释:可行的分组是 [1,1],[2,2],[2,2]

提示:

1 <= deck.length <= 10000

0 <= deck[i] < 10000


二、英文版

In a deck of cards, each card has an integer written on it.
Return true if and only if you can choose X >= 2 such that it is possible to split the entire deck into 1 or more groups of cards, where:
Each group has exactly X cards.
All the cards in each group have the same integer.
Example 1:
Input: deck = [1,2,3,4,4,3,2,1]
Output: true
Explanation: Possible partition [1,1],[2,2],[3,3],[4,4].
Example 2:
Input: deck = [1,1,1,2,2,2,3,3]
Output: false´
Explanation: No possible partition.
Example 3:
Input: deck = [1]
Output: false
Explanation: No possible partition.
Example 4:
Input: deck = [1,1]
Output: true
Explanation: Possible partition [1,1].
Example 5:
Input: deck = [1,1,2,2,2,2]
Output: true
Explanation: Possible partition [1,1],[2,2],[2,2].
Constraints:
1 <= deck.length <= 10^4
0 <= deck[i] < 10^4
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/x-of-a-kind-in-a-deck-of-cards
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


三、My answer

本人的代码实在丑陋,这道题 LeetCode 官方答案深得我心,特意记录下来。
class Solution:
    def hasGroupsSizeX(self, deck: List[int]) -> bool:
        # version 1:
        # from fractions import gcd
        # vals = collections.Counter(deck).values()
        # return reduce(gcd,vals) >= 2
        # version 2:
        d_counter = collections.Counter(deck)
        N = len(deck)
        for X in range(2, N + 1):
            if N % X == 0:
                if all(v % X == 0 for v in d_counter.values()):
                    return True
        return False


四、解题报告

详细讲解在:https://leetcode-cn.com/problems/x-of-a-kind-in-a-deck-of-cards/solution/qia-pai-fen-zu-by-leetcode-solution/

由本题解学到两个函数的用法:

1、reduce() https://www.runoob.com/python/python-func-reduce.html

2、all() https://www.runoob.com/python/python-func-all.html

相关文章
|
7月前
leetcode-6133:分组的最大数量
leetcode-6133:分组的最大数量
52 0
|
7月前
|
Go
golang力扣leetcode 49.字母异位词分组
golang力扣leetcode 49.字母异位词分组
34 0
LeetCode题解-让所有学生保持开心的分组方法数
LeetCode题解-让所有学生保持开心的分组方法数
|
4月前
|
存储 算法
LeetCode第49题字母异位词分组
LeetCode第49题"字母异位词分组"的解题方法,通过将每个字符串的字符排序后作为键存储在HashMap中,有效地将所有字母异位词分组。
LeetCode第49题字母异位词分组
|
2月前
|
存储
Leetcode第49题(字母异位词分组)
LeetCode第49题要求将字符串数组中的字母异位词分组,可以通过将每个字符串排序后作为键存入哈希表,最后将哈希表中的值添加到结果列表中来实现。
15 1
|
6月前
|
存储 算法 安全
LeetCode 题目 49:字母异位词分组 5种算法实现与典型应用案例【python】
LeetCode 题目 49:字母异位词分组 5种算法实现与典型应用案例【python】
|
6月前
|
存储
力扣经典150题第四十二题:字母异位词分组
力扣经典150题第四十二题:字母异位词分组
36 0
|
7月前
|
Windows
力扣100097. 合法分组的最少组数(哈希+贪心)
力扣100097. 合法分组的最少组数(哈希+贪心)
|
7月前
leetcode热题100. 字母异位词分组
leetcode热题100. 字母异位词分组
48 0
|
7月前
leetcode-49:字母异位词分组
leetcode-49:字母异位词分组
46 0