算法 扑克牌顺子

一副牌中有4个大小王(数字0表示,其它牌为1~13),可以代表任何牌,现在抽取5张牌,判断能否组成顺子

传统思路:

统计0的数目,然后其它牌排序,判断是否有间隙,且间隙能被0填充

进阶思路:

统计每张牌出现数目,若超过1次,必定不能组成顺子

记录遍历每张牌途中的最大最小值(区间) 0跳过

若最后 max-min<5 说明一定能组成顺子

class Solution {
public:
    bool IsContinuous( vector<int> numbers ) {
        
        int size=numbers.size();
        if(size<5)
            return false;
        int max=-1;
        int min=14;
        int count[14]={0};//每张牌的数目
        for(int i=0;i<size;i++)
        {
            count[numbers[i]]++;
            if(numbers[i]==0)
                continue;
            if(count[numbers[i]]>1)
                return false;//有重复的牌 
            if(numbers[i]<min)
                min=numbers[i];
            if(numbers[i]>max)
                max=numbers[i];
        }
        if(max-min<5)
            return true;
        else
            return false;
        
        
        
    }
};

猜你喜欢

转载自blog.csdn.net/qq_33369979/article/details/88756409