剑指 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 则可构成顺子
    }

 

posted @ 2020-08-21 20:41  欣姐姐  阅读(145)  评论(0编辑  收藏  举报