扑克牌顺子

你快乐吗?

Posted by bbkgl on September 26, 2019

扑克牌顺子

C++,两种方法。

  1. 排序后判断王的数量能不能补齐顺子的空缺;
  2. 不排序,最大值与最小值的差是否小于4。

以上两种都要注意的几个点:

  • 除了0以外,出现任何重复的数字都说明不能出现顺子;
  • 空序列;

第二种陪了女朋友再更新。

更新第二种方法:

class Solution {
public:
    bool IsContinuous(vector<int> numbers) {
        vector<int> dict(14, 0);
        if (numbers.empty()) return false;
        int min_num = 14, max_num = 0;
        for (int i = 0; i < numbers.size(); i++) {
            if (numbers[i] == 0) {
                continue;
            }
            dict[numbers[i]]++;
            if (dict[numbers[i]] > 1) return false;
            min_num = min(min_num, numbers[i]);
            max_num = max(max_num, numbers[i]);
        }
        if (max_num - 4 <= min_num) return true;
        else return false;
    }
};

第一种排序的很简单,代码直接贴了。

class Solution {
public:
    bool IsContinuous(vector<int> numbers) {
        if (numbers.empty()) return false;
        sort(numbers.begin(), numbers.end());
        int i = 0;
        while (i < numbers.size() && numbers[i] == 0) i++;
        if (i == numbers.size()) return true;
        int cnt = i;
        for (; i < numbers.size() - 1; i++) {
            if (numbers[i+1] - numbers[i] > 1)
                cnt -= (numbers[i+1] - numbers[i] - 1);
            else if (numbers[i+1] - numbers[i] == 0)
                return false;
            if (cnt < 0)
                return false;
        }
        return true;
    }
};