面试题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;
}