<剑指Offer>面试题61: 扑克牌中的顺子

题目描述

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

题目解读

  • 剑指Offer 298

代码

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

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

        if(numbers.size() < 1){
            return false;
        }

        // 排序
        sort(numbers.begin(), numbers.end());

        int zero = 0;
        int gap = 0;
        for(int i=0; i < numbers.size()-1; i++){
            if(numbers[i] == 0){
                zero += 1;
            }else{
                if(numbers[i+1] - numbers[i] - 1 > 0){
                    gap = gap + numbers[i+1] - numbers[i] - 1;
                }

                // 如果是对子,则直接返回 false
                if(numbers[i+1] == numbers[i]){
                    return false;
                }
            }
        }
        return zero < gap ? false : true;
    }
};

int main(){
    Solution ss;
    
    vector<int> numbers;
    // int a[] = {0, 1, 3, 4, 5};
    int a[] = {1, 2, 8, 4, 5};
    for(int i=0; i < 5; i++){
        numbers.push_back(a[i]);
    }
    bool result = ss.IsContinuous(numbers);
    cout<<result<<endl;
}

总结展望

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容