1、抽取的数组个数必须是5个,如果数组个数达不到要求:false!
2、利用Arrays对数组排序以后,就好办了,所以对于sort函数不能陌生。
3、数组中有重复的:false,这里利用了桶计数的方法
4、数组排序后,相邻数之间的差值大于了0的个数,那这个数组就没法凑成顺子了:false
5、0的个数就是4个,多了也不对:false。
剩下的就是对的了
import java.lang.*;
import java.util.*;
public class Solution {
public boolean IsContinuous(int [] numbers) {
int len = numbers.length;
if(len != 5) return false;
int count_zero = 0;
int gap = 0;
int[] cur = new int[14];
Arrays.sort(numbers);
for(int i = 0;i < len ;i++){
if(numbers[i] == 0){
count_zero++;
}else{
if(cur[numbers[i]] != 0){
return false;
}//有重复的牌就不是顺子
cur[numbers[i]] = 1;
if( i!= 0 && numbers[i-1] != 0){
gap += numbers[i] - numbers[i-1] - 1;
}
}
}
if(count_zero == 5 || count_zero < gap) return false;//王的个数补不上牌与牌之间的差值
return true;
}
}
京公网安备 11010502036488号