提供一种与书上不太相同的思路:首先新建一个长度为5(顺子长度)的数组,对于除了大小王以外的数,按照从大到小的顺序依次放入数组中。但是不是一个一个挨着放,而是放到数组相应的位置。
举个例子,对于升序数组“0,0,4,6,7”,先将4放到数组下标为0的位置。
然后将6放到数组相应的位置:
然后将7放到数组相应的位置:
如果非0的数全部都放在数组中,那么这一序列就是顺子。如果在将牌放入数组的过程中,出现下标越界的情况,则说明不可能组成顺子。
我觉得这个方法可能要比书上的更容易理解一点。
附上代码:
import java.util.Arrays;
public class Solution {
public boolean isContinuous(int [] numbers) {
if(numbers.length==0){
return false;
}
Arrays.sort(numbers);
int[] continuousArray=new int[5];
int index=0;
int curNum=0;
int startIndex=0;
while(numbers[startIndex]==0){//大小王不用管,越过即可
startIndex++;
}
curNum=numbers[startIndex];
for(int i=startIndex+1;i<numbers.length;i++){
if(numbers[i]!=0){
int diff=numbers[i]-curNum;
if(diff==0){//对子直接返回false
return false;
}
if(diff>=numbers.length-index){//下一张牌与上一张牌的差不能超过5-index
return false;
}
index+=diff;
continuousArray[index]=numbers[i];
curNum=numbers[i];
}
}
return true;
}
}