[力扣活动] 914. 卡牌分组
作者:互联网
<collections.Counter> <辗转相除法求最大公约数(递归)>
题目描述
给定一副牌,每张牌上都写着一个整数。
此时,你需要选定一个数字 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
我的思路
1.统计每个数字出现的次数,设这些次数组成集合X
2.求X的最大公约数:gcd(X)
总结
1.辗转相除法求两个数的最大公约数(递归):
def gcd(a, b): mod_ = a%b if mod_ == 0: return b return gcd(b,mod_)
Q&A:这里调试了一下,到最后直接返回了,没有回溯,为什么?
2.collections.Counter的运用,values()方法返回字典值的列表:
vals = collections.Counter(deck).values()
标签:gcd,示例,卡牌,力扣,分组,914,true,输入,mod 来源: https://www.cnblogs.com/remly/p/12588512.html