首页 > 代码库 > 剑指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; }}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。