思路

  1. 大小王可以当任意数字使用
  2. 顺子中的牌不能有重复
  3. 数组中的最大值和最小值差值不能 > 5(一共就五张牌)

只要满足以上3个条件即可构成顺子

这里有个小疑问,不知道打牌规则里的 13 ,1,2,3,4 能不能构成顺子?🤔️

class Solution {
    public boolean isStraight(int[] nums) {
        Arrays.sort(nums);// 排序用于判断重复性,用map和set都可以
        // 大小王的数目
        int z = 0;
        // 顺子应该是最小值~最小值+4 最小值为1,最大值必须为5之内,可以是2,大小王可以补数字
        // 顺子中不能有重复牌,存在重复表示非顺子
        int min = 13;
        int max = 0;
        for (int i = 0 ; i < nums.length; i++) {
            if(nums[i] == 0) z++;
            if(nums[i] != 0) min = Math.min(nums[i],min);
            max = Math.max(nums[i],max);
            // 除了大小王,不能有重复牌
            if (i < nums.length - 1) {
                if (nums[i] != 0 &&nums[i] == nums[i+1]) return false;
            }
        }
        return max - min <= 4;
        
    }
}

Q.E.D.


每一个平凡的日常都是连续的奇迹