思路:统计0的个数,统计每个数字之间差了多少个数字,如果差的个数大于0的个数就凑不成顺子。当然,有同牌的也不是顺子
比如1 3 5 0 0 先排序得到0 0 1 3 5
差的数字有2 4 两个数字,但是有两个0,可以补充,所以可以构成顺子
class Solution {
public:
bool IsContinuous( vector<int> numbers )
{
int len = numbers.size();
if(len <= 0 )
return false;
sort(numbers.begin(), numbers.end() );//排序
int count_zero = 0;//统计0的个数
for(int i = 0; i < len; i++)
{
if(numbers[i] == 0)
count_zero++;
}
int pre = 0, next = pre + 1;
int gap = 0;
while(pre <= len - 2)
{
//有相同的非零的牌就没有顺子
if(numbers[pre] && numbers[next] && numbers[pre] == numbers[next])
return false;
if(numbers[pre] != 0 && numbers[next] != 0 )
{
if(numbers[next] - numbers[pre] >1)
gap += ((numbers[next] - numbers[pre]) - 1);//差值相加
}
pre++;
next++;
}
if(gap > count_zero)//大小王不够
return false;
else
return true;
}
};