排完序,题目就很简单了。需要注意的是题目有王,王可以变任意的牌。
那先统计王的个数。
然后从王之后的第二个数开始看牌。
比上一张牌大于1是正常情况。相等是直接返回,肯定不是顺子。
大于2或者更多的时候,需要看中间的空位,是否有足够多的王来填补。足够填补继续,把王的个数减去填补的空位数,否则直接返回。

class Solution {
public:
    bool IsContinuous( vector<int> numbers ) {
        bool res = true;
        int zeros = 0;
        sort(numbers.begin(), numbers.end());
        for(int i=0;i<5;i++){
            if(numbers[i] == 0){
                zeros += 1;
            }
        }
        
        for(int i=zeros+1;i<5;i++){
            int step = numbers[i] - numbers[i-1] - 1;
            if(step < 0){
                res = false;
                break;
            }
            
            if(step != 0){
                if(zeros >= step){
                    zeros = zeros - step;
                }else{
                    res = false;
                }
            }
        }
        return res;
    }
};