题目
从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王可以看成任意数字。
解题思路
可以总结5张牌是顺子应满足的条件:
- 数组长度必须为5;
- 除0外没有重复的牌(用0表示大小王);
- 顺子中最大值和最小值的差值小于5(不包括0)。
代码
class Solution{
public:
bool IsContinuous(vector<int> numbers){
//有5张牌
if(numbers.size() != 5) return false;
//扑克牌十四张牌出现次数
vector<int> count(14,0);
//辅助变量
int len = numbers.size(); //数组长度(5)
int max = -1; // 比最小的0小
int min = 14; // 比最大的13大
for(int i = 0; i < len; i++){
count[numbers[i]]++; //数字numbers[i]出现一次
if(numbers[i] == 0) continue; //大小王可以重复
if(count[numbers[i]] > 1) return false; //其他牌不可以重复
//更新max和min(0不会下来)
if(numbers[i] > max) max = numbers[i];
if(numbers[i] < min) min = numbers[i];
}
if(max - min < 5) return true;
return false;
}
};