914. 卡牌分組
阿新 • • 發佈:2020-08-24
給定一副牌,每張牌上都寫著一個整數。
此時,你需要選定一個數字 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]
解釋:可行的分組是 [1,1],[2,2],[2,2]
提示:
1 <= deck.length <= 10000
0 <= deck[i] <10000
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/x-of-a-kind-in-a-deck-of-cards
就是找每種牌出現的次數是否有大於等於2的公共質因數
丟人解法
class Solution: def hasGroupsSizeX(self, deck: List[int]) -> bool: n=len(deck) x=n if n==1:return False if n==2:return deck[0]==deck[1] dict=[] for i in set(deck): dict.append(deck.count(i)) x=min(x,deck.count(i)) if x==1:return False if x%2==0: flag=True for i in dict:if i%2!=0:flag=False if flag: return True if x%3==0: flag=True for i in dict: if i%3!=0:flag=False if flag: return True if x%5==0: flag=True for i in dict: if i%5!=0:flag=False if flag: return True if x%7==0: flag=True for i in dict: if i%7!=0:flag=False if flag: return True return False
裝逼寫法
from collections import Counter from math import gcd class Solution: def hasGroupsSizeX(self, deck: List[int]) -> bool: return reduce(gcd,Counter(deck).values())>=2