从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王可以看成任意数字。
- 功能测试(抽出的牌中有一个或者多个大、小王;抽出的牌中没有大、小王;抽出牌有对子)
- 特殊输入测试(输入空指针)
考察应聘者的抽象建模能力。
我这个小伙子抽象能力不行呀!!!
- 数组排序
- 统计数组中0的个数
- 统计排序之后的数组中相邻数字之间的空缺总数
- 比较0的个数和空缺总数
没有好的抽象,只有超级暴力解题。
/**
* 扑克牌中的顺子
*
* @Author rex
* 2018/9/18
*/
public class Solution {
/**
* 参考解题
* @param numbers 0表示大小王
* @return
*/
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 {
break;
}
}
// 3. 统计排序之后的数组中相邻数字之间的空缺总数
int lackCount = 0;
int temp = numbers[zeroCount];
for (int i = zeroCount; i < numbers.length - 1; ) {
if (numbers[i + 1] - temp == 1) {
i++;
} else if (numbers[i + 1] - temp == 0) {
return false;
} else {
lackCount++;
}
temp++;
}
// 4. 比较0的个数和空缺总数
if (lackCount > zeroCount) {
return false;
}
return true;
}
}