給定一副牌,每張牌上都寫着一個整數。
此時,你需要標明一個數字
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
class Solution:
def hasGroupsSizeX(self, deck: 'List[int]') -> 'bool':
deck = sorted(deck)
num = {}
x, count = 1, 1
# 統計每個元素的個數,放在字典中
for i in range(0, len(deck)-1):
if deck[i] == deck[i+1]:
count += 1
else:
num[deck[i]] = count
count = 1
num[deck[-1]] = count
# 找出個數最小的X,并判斷是否>=2
x = min(num.values())
if x < 2:
return False
# 判斷每個元素的個數是否都能被 2到x之間 的數整除,即是否可以分組
for i in range(2, x + 1):
for cot in num.values():
if cot % i != 0:
break
else:
return True
return False
def hasGroupsSizeX2(self, deck: 'List[int]') -> 'bool':
d = set(deck)
dic = {}
# 統計每個元素的個數(内置函數),放在字典中
for i in d:
dic[i] = deck.count(i)
# 找出個數最小的X
mn = min(dic.values())
for i in range(2, mn + 1):
for j in dic.values():
if j % i != 0:
break
else:
return True
return False
if __name__=='__main__':
s = Solution()
A = [1,1,1,1,2,2,2,2,2,2]
print(s.hasGroupsSizeX(A))