846. 一手顺子

exiaohu 于 2021-12-30 发布

题目链接:846. 一手顺子

贪心策略,每次从最小的牌开始,看能不能凑出一组,如果不能,那么就不是一手顺子。重复这个过程,直到用光所有手牌,如果能用光,那么就是一手顺子。

from collections import Counter
from typing import List


class Solution:
    def isNStraightHand(self, hand: List[int], groupSize: int) -> bool:
        if len(hand) % groupSize != 0:
            return False

        card_counter = Counter(hand)
        cards = sorted(card_counter)

        while len(cards) > 0:
            card, card_count = cards[0], card_counter.get(cards[0])

            for i in range(card, card + groupSize):
                new_card_count = card_counter.get(i, 0) - card_count
                if new_card_count < 0:
                    return False
                elif new_card_count == 0:
                    cards.remove(i)

                card_counter[i] = new_card_count

        return True