剑指offer——扑克牌顺子

题目描述:

从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大小王可以看成任意数字(真实的输入其实只有数字0~13,无需自己转换)。

思路:

    1. 对数组进行排序

    2. 遍历数组数字,统计0的数量;统计总间隔数,如01345则间隔为1;对子直接返回false。

    3. 如果0的数目大于等于间隔数,则返回true。如01345,0可以当成2。

代码:

语言C++,已通过牛客网在线测试。

class Solution {
public:
    bool IsContinuous( vector<int> numbers ) {
        if(numbers.size() == 0) return false;
        sort(numbers.begin(), numbers.end());
        int zeros = 0, interval = 0;
        for(int i = 0; i < numbers.size() - 1; i++){
            if(numbers[i] == 0) {
                zeros++;
                continue;
            }
            if(numbers[i] == numbers[i+1]) return false;
            interval += numbers[i+1] - numbers[i] - 1;
        }
        return (zeros >= interval) ? true : false;
    }
};

猜你喜欢

转载自blog.csdn.net/u012327058/article/details/80981726