从若干副扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。
思路:
如果是一个顺子,有什么特点,如果不是顺子,又有什么特点? 例如1,2,3,4,5和1,3,4,5,6。观察可知,顺子的第一个数比最后一个数小4,不是顺子的第一个数比第二个数小5。如果是0,0,1,4,5,它也是顺子,不算0,第一个数比最后一个数小4。如果是0,0,1,4,6,第一个数比最后一个数小5。总结规律。如果第一个数比最后一个数小4或者更少,则是顺子,如果多于4则不是顺子。如果存在相等的数,则也不是顺子。使用排序,如果有相等的数,则会位于相邻位置。
代码:
class Solution {
public:
bool isStraight(vector<int>& nums) {
sort(nums.begin(),nums.end());
int len = nums.size();
int zero = 0;
for(int i = 0;i < len;i++) {
if(nums[i] == 0) {
zero++;
}
else if(i > 0 && nums[i] == nums[i-1]) {
return false;
}
}
return nums[len-1] - nums[zero] < len;
}
};