题目
从扑克牌中随机抽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的数目

    1. class Solution {
    2. public:
    3. bool isContinuous( vector<int> numbers ) {
    4. if (numbers.size() != 5) return false;
    5. sort(numbers.begin(), numbers.end());
    6. int cnt = 0;
    7. for (int i = 0; i < numbers.size(); i++) {
    8. if (numbers[i] == 0) cnt++;
    9. else if (i && numbers[i - 1]) {
    10. if (numbers[i] == numbers[i - 1]) return false;
    11. cnt -= numbers[i] - numbers[i - 1] - 1;
    12. if (cnt < 0) return false;
    13. }
    14. }
    15. return true;
    16. }
    17. };