剑指offer---扑克牌顺子

题目:扑克牌顺子

要求:从扑克牌中抽出5张牌,其中大小王可以代表任意牌,A代表1,J代表11, Q代表12, K代表13,判断抽出的五张牌是不是顺子,如 4 6 8 0 0 是顺子,返回true

技巧: 如果五张牌里面含有四个以上(含四个)大小王,那就一定是顺子, 如 3 0 0 0 0

class Solution {
public:
    bool IsContinuous( vector<int> numbers ) {
        
    }
};

解题代码:

class Solution {
public:
    static bool cmp(int a,int b){
        return a < b;
    }

    bool IsContinuous(vector<int> numbers) {
        if(numbers.size() != 5)
            return false;
        // 对numbers进行排序
        sort(numbers.begin(), numbers.end(), cmp);
        int numOfZero = 0;
        int numOfBlank = 0;
        // 统计0的个数
        for(int i = 0; i < numbers.size(); i++){
            if(numbers[i] == 0)
                numOfZero++;
        }
        if(numOfZero == 4 || numOfZero == 5)
            return true;

        // 统计空缺的个数
        for(int i = numOfZero; i < numbers.size()-1; i++){
            int temp = numbers[i+1] - numbers[i];
            if(temp != 1)
                numOfBlank  = numOfBlank + temp - 1;
        }
        return numOfZero == numOfBlank;
    }
};
原文地址:https://www.cnblogs.com/iwangzhengchao/p/9959090.html