目录
题目描述
从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王可以看成任意数字。
测试用例
- 功能测试(抽出的牌中有一个或者多个大、小王;抽出的牌中没有大、小王;抽出牌有对子)
- 特殊输入测试(输入空指针)
题目考点
考察应聘者的抽象建模能力。
解题思路
- 数组排序
- 统计数组中0的个数
- 统计排序之后的数组中相邻数字之间的空缺总数
- 比较0的个数和空缺总数
参考解题
空缺的个数和单纯的数差之间相差一个1,这个细节卡了我一会儿,🤺
import java.util.Arrays;
public class Solution {
// 扑克牌顺子
public boolean isContinuous(int [] numbers) {
// 异常
if(numbers == null || numbers.length < 1){
return false;
}
// 1、数组排序
Arrays.sort(numbers);
// 2、统计0个数
int zeroCount = 0;
for(int i = 0 ; i < numbers.length ; ++i){
if(numbers[i] == 0){
zeroCount++;
}else{
continue;
}
}
// 3、统计排序后数组相邻f非零数字之间的空缺总数
int lackCount = 0;
for(int i = zeroCount; i < numbers.length -1;++i ){
// 第一个非零数num[zreoCount]
if(numbers[i+1] - numbers[i] == 0) {
return false;
}else if(numbers[i+1] - numbers[i] == 1){
continue;
}else{
lackCount += numbers[i+1] - numbers[i] - 1;
}
}
// 4、比较0的个数和空缺总数
if(lackCount > zeroCount){
return false;
}
return true;
}
}