首页 > 代码库 > 剑指offer (44) 扑克牌的顺子

剑指offer (44) 扑克牌的顺子

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

2-10为数字本身,A为1,J为11,Q为12,K为13,大小王可以替换任意数字

 

题解分析:

step1. 首先大小王看作0,与其他数字都区分开

step2. 对这5张牌排序

step3. 统计5张牌中0的个数和 相邻数字之间的空缺总数,因为 我们可以把0替换掉空缺所需的数

bool IsContinuous(std::vector<int>& num){    if (num.size() != 5) return false;    std::sort(num.begin(), num.end());    int zeroNum = std::count(num.begin(), num.end(), 0);    int gapNum = 0;    for (int i = 0; i < num.size() - 1; ++i) {        if (num.at(i) == 0) continue;      // 直接跳过0        if (num.at(i) == num.at(i + 1)) {  // 有对子            return false;        }        gapNum += (num.at(i + 1) - num.at(i) - 1);    }    if (gapNum <= zeroNum) {        return true;    } else {        return false;    }}