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

2020-02-20  本文已影响0人  shenghaishxt

题目描述

从扑克牌中随机抽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;
}
上一篇下一篇

猜你喜欢

热点阅读