剑指Offer:扑克的顺子

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

      大、小王是特殊的数字,我们不妨把它 们都定义为 0,这样就能和其他扑克牌区分开来了。

      判断 5 个数字是不是连续的,最简单的方法是把数组排序。由于 0 可以当成任意数字,我们可以用 0 去补满数组中的间隔(1和3之间间隔2,空1个数)。如果排序之后的数组不是连续的,即相邻的两个数字相隔若干个数字,但只要我们有足够的。可以补满这两个数字的空缺,这个数组实际上还是连续的。举个例子,数组排序之后为{0,1,3,4,5},在 1和 3 之间空缺了一个 2,刚好我们有一个 0,也就是我们可以把它当成 2 去填补这个主缺。

      我们需要留意的是如果数组中有2个或2个以上非0数字相同,那么一定不是连续的。

实现代码:

private static boolean isContinue(int[] nums){
	if(nums==null||nums.length==0){
		return false;
	}
	int zeros=0;
	int gaps=0;
	//第一步,将数组排序
	Arrays.sort(nums);
	//第二步:统计数组中0的个数
	for(int i=0;i<nums.length;i++)
		if(nums[i]==0)
			zeros++;
	for(int i=0;i<nums.length-1;i++){
		if(nums[i]==nums[i+1]&&nums[i]!=0){
			return false;//非9数字成对出现,之间返回false
		}
		if(nums[i]+1!=nums[i+1]){
			gaps=nums[i+1]-nums[i]-1;//获得空缺数
		}
	}
	System.out.println(gaps);
	return zeros>=gaps?true:false;
}
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值