剑指 Offer 61. 扑克牌中的顺子

class Solution {
    public boolean isStraight(int[] nums) {
        Arrays.sort(nums);
        int i = 3;
        if(nums[4]<3) return false;
        while(i>=0){
            if(nums[i] == nums[i+1]) return false;
            if(nums[i] == nums[i+1] - 1){
                i--;
            }else{
                if(nums[0] == 0){
                    nums[0] = nums[i+1] - 1;
                    i--;
                    Arrays.sort(nums);
                }else{
                    return false;
                }
            }
        }
        return true;
    }
}

public boolean isStraight(int[] nums) {
        Set<Integer> repeat = new HashSet<>();
        int max = 0, min = 14;
        for(int num : nums) {
            if(num == 0) continue; // 跳过大小王
            max = Math.max(max, num); // 最大牌
            min = Math.min(min, num); // 最小牌
            if(repeat.contains(num)) return false; // 若有重复,提前返回 false
            repeat.add(num); // 添加此牌至 Set
        }
        return max - min < 5; // 最大牌 - 最小牌 < 5 则可构成顺子
    }

我的前方是万里征途,星辰大海!!
原文地址:https://www.cnblogs.com/taoyuxin/p/13543190.html