讨论/《画解剑指 Offer》 - 剑指 Offer 61. 扑克牌中的顺子 - 解决方案/
《画解剑指 Offer》 - 剑指 Offer 61. 扑克牌中的顺子 - 解决方案
共 3 个回复

Java版

class Solution {
    public boolean isStraight(int[] nums) {
        int len = nums.length;
        if (len != 5) {
            return false;
        }

        int jkcnt = 0;
        Arrays.sort(nums);
        for (int i = 0; i < len; i++) {
            // 先判断,同时防止数组溢出
            if (nums[i] != 0 && i != len - 1) {
                if (nums[i] == nums[i+1]) 
                    return false;
            }
            // 统计0的个数
            if (nums[i] == 0) {
                jkcnt++;
            }
            
        }

        return nums[len - 1] - nums[jkcnt] < 5;
    }
}

那我补个C++版本的

class Solution {
public:
    bool isStraight(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        int i = 0;
        while(nums[i] == 0) i++;
        if(nums.back() - nums[i] > 4) return false;
        for(; i < nums.size() - 1; i++){
            if(nums[i] == nums[i+1]) return false;
        }
        return true;
    }
};

补一个python版本的

class Solution:
    def isStraight(self, nums: List[int]) -> bool:
        joker = 0
        nums.sort()
        for i in range(4):
            if nums[i]==0:
                joker+=1
            elif nums[i]==nums[i+1]:
                return False
        return nums[4]-nums[joker]<5