java 判断是否是顺子_【Java】 剑指offer(61) 扑克牌的顺子

根据《剑指offer》的题目,用Java编写代码判断5张扑克牌是否构成顺子。通过排序、计算0(大小王)数量及空缺,判断是否连续。测试用例包括各种情况,如包含大小王、对子、连续或不连续。代码中使用了Arrays.sort进行排序,并检查相邻数字是否相等以排除对子。
摘要由CSDN通过智能技术生成

本文参考自《剑指offer》一书,代码采用Java语言。

题目

从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王可以看成任意数字。

思路

输入为大小等于5的数组(大小王记为0),输出为布尔值。具体步骤如下:

1)进行对5张牌进行排序;

2)找出0的个数;

3)算出相邻数字的空缺总数;

4)如果0的个数大于等于空缺总数,说明连续,反之不连续;

5)记得判断相邻数字是否相等,如果有出现相等,说明不是顺子。

测试算例

1.功能测试(没有/有一个/多个大小王,有对子,连续/不连续)

2.特殊测试(null)

Java代码

//题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。

//2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王可以看成任意数字。

public class ContinousCards {

public boolean isContinuous(int [] numbers) {

if(numbers==null || numbers.length<=0)

return false;

Arrays.sort(numbers);

int numberOf0 = 0;

int numberOfGap = 0;

for(int i=0;i

if(numbers[i]==0)

numberOf0++;

}

int small = numberOf0;

int big = numberOf0+1;

while(big

if(numbers[small]==numbers[big])

return false;

numberOfGap+=numbers[big++]-numbers[small++]-1;

}

if(numberOf0>=numberOfGap) //大于等于,而不是等于!

return true;

return false;

}

}

收获

1.这道题中,自己最开始想的是把0插入到空缺当中,当其实只要计算出0的个数和空缺的个数进行比较即可,有时候稍微转换一下思路就豁然开朗了。

2.对数组排序,采用Arrays.sort(numbers)方法(快排原理)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值