题解 | #扑克牌顺子#
扑克牌顺子
http://www.nowcoder.com/practice/762836f4d43d43ca9deb273b3de8e1f4
有两张非王牌相同时,一定不能组成顺子,其他情况下,可以先对数据排序(升序),再用后一张牌的值减去前一张牌的值,第一张非零牌的值令为零,这样得到的数据就是每张牌之间差的值,当这个数值小于等于4时即可组成顺子。
class Solution {
public:
bool IsContinuous( vector<int> numbers )
{
int n=0;
sort(numbers.begin(),numbers.end());
for(int i=0;i<4;i++)//除去有非王重复牌的情况
{
if(numbers[i]==numbers[i+1]&&numbers[i]!=0)
return false;
}
for(int i=4;i>=0;i--)//把前后牌的差值计算出来并把第一张非零牌的值归零
{
if(i!=0)
{
numbers[i]=numbers[i]-numbers[i-1];
if(numbers[i-1]==0)
numbers[i]=0;
}
else
{
numbers[i]=0;
}
}
for(int i=0;i<5;i++)//计算差值的总和
{
n=n+numbers[i];
}
if(n<5)
return true;
return false;
}
};