《剑指offer第二版》面试题61:扑克牌中的顺子(java)
2020-03-01 本文已影响0人
castlet
题目描述
- 从扑克牌中随机抽取5张,判定是不是顺子,A为1,J为11,Q为12,K为13,大小王可以看成任意数字。
解题思路
- 现将数组排序。
- 找出0的个数A。
- 找出相邻数字之间空缺数字的总数B。
- 如果B小于等于A,则说明是顺子。
- 如果出现了对子,则肯定不是顺子。
代码
boolean isContinuous(int[] arr){
if (arr == null || arr.length <= 0) {
return false;
}
Arrays.sort(arr);
int numbersOf0 = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] == 0) {
numbersOf0 ++;
}
}
int end = numbersOf0 + 1;
int gap = 0;
while (end < arr.length) {
if (arr[end] - arr[end - 1] == 0) {
return false;
}
if (arr[end] - arr[end - 1] == 1) {
end++;
} else if (arr[end] - arr[end - 1] > 1) {
gap = gap + (arr[end] - arr[end - 1] - 1);
end++;
}
}
if (gap <= numbersOf0) {
return true;
}
return false;
}