AcWing 81. 扑克牌的顺子

题目描述

从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。

2~10为数字本身,A为1,J为11,Q为12,K为13,大小王可以看做任意数字。

为了方便,大小王均以0来表示,并且假设这副牌中大小王均有两张。

样例1

输入:[8,9,10,11,12]

输出:true

样例2

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

输出:true

问题分析 

先将数组排序,然后将数组左边的0去掉,接下来遍历剩下的元素,看看有没有相邻元素相等的情况,如果有那么返回false。最后判断去掉0后剩下的子数组的首尾元素的差值,如果小于等于4,说明一定可以形成顺子,返回true,否则返回false。

代码实现

class Solution {
public:
    bool isContinuous(vector<int> numbers) {
        int n = numbers.size();
        if(n != 5)
            return false;
        sort(numbers.begin(), numbers.end());
        int i = 0;
        for(; i < n; i++){
            if(numbers[i])
                break;
        }
        int l = i;
        for(; i < n - 1; i++){
            if(numbers[i] == numbers[i+1])
                return false;
        }
        return (numbers[n-1] - numbers[l]) <= 4;
    }
};

猜你喜欢

转载自blog.csdn.net/mengyujia1234/article/details/89927136