剑指offer刷题————扑克牌顺子

问题重述:

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

思路解析:

首先我们认为大王和小王为数字0,首先我们统计0的个数,然后将数组排序,并且判断中间缺的数的个数比0的个数多还是少,如果比0的个数多,那么就不是顺子,具体思路可以参见下面代码。

代码实现:

class Solution {
public:
    bool IsContinuous( vector<int> numbers ) {
        if(numbers.size()!=5)
            return false;
        
        int count_0 = 0;
        auto it = numbers.begin();
        for(;it!=numbers.end();++it)
        {
            //统计0和重复的
            if(*it==0)
            {
                 ++count_0;
                continue;
            }
               
            if(find(it+1,numbers.end(),*it)!=numbers.end())
                return false;
        }
        //奖number进行排序
        int dif = 0;
        sort(numbers.begin(),numbers.end(),less<int>());
        for(int i = 1;i<numbers.size();++i)
        {
            if(numbers[i-1]==0)
                continue;
            dif += abs(numbers[i]-numbers[i-1])-1;
        }
        if(dif>count_0)
            return false;
        return true;
        
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值