扑克牌中的顺子

从若干副扑克牌中随机抽 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;
    }
};