概述
思路:
(1)利用数组给牌排序,单独统计0的数量;
(2)定位到扑克牌第一张牌,向后寻找空缺,用0牌填充;
(3)若0牌还有剩余,从扑克牌的第一张牌向前填充;
(4)0牌依然剩余,不存在顺子,此时牌数大于13;
(5)从顺子向后检查,若存在间断的牌,不存在顺子,否则这副牌符合顺子要求。
public static boolean isContinuous(int [] numbers) {
if(numbers==null||numbers.length==0) return false;
//变量定义
boolean answer=false;
boolean[] arrayForSort=new boolean[14];
int zeroCount=0;
//借助哈希表排序
Arrays.fill(arrayForSort,false);
for(int elem:numbers){
//检查不符合规范的数字
if(elem<0||elem>13) {
answer=false;
return answer;
}
//0牌单独统计
else if(elem==0){
zeroCount++;
}
//已经存在相同的牌,不存在顺子
else {
if(arrayForSort[elem]){
answer=false;
return answer;
}
else {
arrayForSort[elem]=true;
}
}
}
//检查是否为顺子
int index=0;
//定位到顺子(这里定位到了顺子的第二张)
while(index<14&&!arrayForSort[index++]);
//填充空白
for(int i=index;i<14&&(zeroCount>0);i++){
if(!arrayForSort[i]){
arrayForSort[i]=true;
zeroCount--;
}
}
//后面填满,向前填充
for(int i=index-2;i>=0&&(zeroCount>0);i--){
arrayForSort[i]=true;
zeroCount--;
}
//还有0牌剩余,说明出现牌数量大于13
if(zeroCount>0) {
answer=false;
return answer;
}
//检查顺子之后是否还有不连续的牌
while(index<14&&arrayForSort[index++]);
while(index<14&&!arrayForSort[index++]);
if(index>=14) answer=true;
return answer;
}
最后
以上就是眼睛大秋天为你收集整理的扑克牌顺子的全部内容,希望文章能够帮你解决扑克牌顺子所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复