【每日一题】扑克牌中的顺子(Java版)

题目

从若干副扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/bu-ke-pai-zhong-de-shun-zi-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题目示例

解题思路

  • 因为大小王可以替换为任何数字,所以0可以重复
  • 其他数字不可以重复,因为是顺子
  • 顺子的特征就是最大减去最小的小于5(<=4)

难点

  • 0可以重复的思考
  • 最大值减去最小值的< 5的思路

示例

  public class IsStraight {

    /**
     * 最大减最小,结果小于5 是顺子
     * 除去0元素外,不能有重复的其他数据
     *
     * @param nums
     * @return
     */
    public boolean isStraight(int[] nums) {
        if (Objects.isNull(nums) || nums.length < 5) {
            return false;
        }

        Set<Integer> numSet = new HashSet<>();
        int max = 0;
        int min = 13;
        for (int num : nums) {
            if (num == 0) {
                continue;
            }
            if (numSet.contains(num)) {
                return false;
            }

            max = Math.max(max, num);
            min = Math.min(min, num);
            numSet.add(num);
        }
        return max - min < 5;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。