美文网首页
面试题61_扑克牌中的顺子

面试题61_扑克牌中的顺子

作者: shenghaishxt | 来源:发表于2020-02-20 12:30 被阅读0次

    题目描述

    从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。

    题解

    题目的意思是判断扑克牌是否连续,大小王可以代替任何数字(就和斗地主中的癞子一样)。

    本题中使用0代表大小王,我们可以先对数组排序,计算出大小王的数量。然后再计算数组中数的间隔,看大小王能不能将其填充。如果大小王的数量大于等于间隔的数量,那么代表扑克牌中有顺子;否则扑克牌中没有顺子。

    下面是参考代码:

    public boolean isContinuous(int[] numbers) {
        if (numbers.length == 0)
            return false;
        Arrays.sort(numbers);
        int kings = 0, totalGap = 0;
        for (int i = 0; i < numbers.length; i++) {
            // 计算大小王的数量
            if (numbers[i] == 0) {
                kings++;
                continue;
            }
            // 计算数的间隔
            if (i < numbers.length-1) {
                int gap = numbers[i+1] - numbers[i] - 1;
                // 如果出现对子,直接返回false
                if (gap == -1)
                    return false;
                totalGap += gap;
            }
        }
        return kings >= totalGap;
    }
    

    相关文章

      网友评论

          本文标题:面试题61_扑克牌中的顺子

          本文链接:https://www.haomeiwen.com/subject/ndfxqhtx.html