问题重述:
题目:从扑克牌中随机抽取张牌,判断是不是一个顺子,即这张牌是不是连续的,2~10为数字本身,A为1,J为11,Q为12,K为13,而大王小王可以看成任意的数字。
思路解析:
首先我们认为大王和小王为数字0,首先我们统计0的个数,然后将数组排序,并且判断中间缺的数的个数比0的个数多还是少,如果比0的个数多,那么就不是顺子,具体思路可以参见下面代码。
代码实现:
class Solution {
public:
bool IsContinuous( vector<int> numbers ) {
if(numbers.size()!=5)
return false;
int count_0 = 0;
auto it = numbers.begin();
for(;it!=numbers.end();++it)
{
//统计0和重复的
if(*it==0)
{
++count_0;
continue;
}
if(find(it+1,numbers.end(),*it)!=numbers.end())
return false;
}
//奖number进行排序
int dif = 0;
sort(numbers.begin(),numbers.end(),less<int>());
for(int i = 1;i<numbers.size();++i)
{
if(numbers[i-1]==0)
continue;
dif += abs(numbers[i]-numbers[i-1])-1;
}
if(dif>count_0)
return false;
return true;
}
};