排完序,题目就很简单了。需要注意的是题目有王,王可以变任意的牌。
那先统计王的个数。
然后从王之后的第二个数开始看牌。
比上一张牌大于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; } };