扑克牌的顺子

博客围绕判断从扑克牌随机抽取的5张牌是否为顺子展开。规定2 - 10为数字本身,A为1,J为11,Q为12,K为13,大小王用0表示。给出样例及分析,通过统计0个数、检查数字重复性和空缺总数来判断是否为顺子。

题目描述:

从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。
2~10为数字本身,A为1,J为11,Q为12,K为13,大小王可以看做任意数字。
为了方便,大小王均以0来表示,并且假设这副牌中大小王均有两张。

样例:

输入:[0,8,9,11,12]
输出:true

分析:

首先统计数字中0的个数,并将不为0的数字放到对应下标处,若该数字重复出现则直接返回false。
然后遍历数组,统计空缺的总数如果小于等于0的个数则返回true,否则为false。

public boolean isContinuous(int [] numbers) {
		if(numbers==null||numbers.length==0)
			return false;
		int []temp=new int[14];
        for(int i=0;i<numbers.length;i++) {
        	if(numbers[i]==0)
        		temp[0]++;
        	else {
        		if(temp[numbers[i]]==0)
        			temp[numbers[i]]=numbers[i];
        		else {//说明数字重复了可使用的0要减少一个
        			return false;
        		}
        	}
        }//共有几个0
        for(int i=1;i<13;i++) {
        	if(temp[i]!=0) {
        		int count=1;
        		while(true) {
        			i++;
        			count++;
        			if(temp[i]==0) {
            			temp[0]--;
            			if(temp[0]<0)
            				return false;
            		}
        			if(count==5)
        				return true;
        		}
        	}
        }
        return true;
    }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值