题目:
从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。
分析:
顺子是连续的五张牌,大小王可以当任意牌用。
1.出现重复牌,一定错误。 所以考虑去重操作。
大小王都是0,所以去重的时候跳过0,额外统计就好了。
2.确保有五张不重复的牌(0除外),且最大的牌与最小的牌之差小于五,那么五张牌一定连续。
class Solution {
public:
bool isStraight(vector<int>& nums)
{
//去重,确保五张牌没有重复,大小王不统计在内。
set<int>res;
//统计大小王的数量。
int countOf0=0;
//为了统计五张牌中的最大值和最小值
//如果max-min<5,而牌中又无重复,那么我们可以肯定他们是连续的。
int min=14,max=0;
for(auto x:nums)
{
if(x!=0)
{
min=(min<x)?min:x;
max=(max<x)?x:max;
res.insert(x);
}
// 大小王数目统计。
else countOf0++;
}
//判断语句第一个是判断,大小王加上set里面的牌够不够五张,
//不够五张说明有重复,不满足条件,第二个判断我们上面说啦。
//只有满足该条件才能返回true,其余都是fasle。
if(countOf0+res.size()==5&&max-min<5) return true;
return false;
}
};