题目:
给定一副牌,每张牌上都写着一个整数。
此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组:
- 每组都有
X张牌。 - 组内所有的牌上都写着相同的整数。
仅当你可选的 X >= 2 时返回 true。
算法:
本质上是将问题转换为球num count的最大公因数
func hasGroupsSizeX(deck []int) bool {
numCount := make(map[int]int)
g := -1
for i := range deck {
numCount[deck[i]] ++
}
for _, cnt := range numCount {
if g == -1 {
g = cnt
} else {
g = gcd(g, cnt)
if g < 2 {
return false
}
}
}
return g >= 2
}
func gcd(a, b int) int {
if a == 0 {
return b
}
return gcd(b % a, a)
}