劍指OFFER_撲克牌中的順子
阿新 • • 發佈:2020-07-21
劍指OFFER_撲克牌中的順子
題目
從撲克牌中隨機抽5張牌,判斷是不是一個順子,即這5張牌是不是連續的。2~10為數字本身,A為1,J為11,Q為12,K為13,而大、小王為 0 ,可以看成任意數字。A 不能視為 14。
示例 1:
輸入: [1,2,3,4,5]
輸出: True
示例 2:
輸入: [0,0,1,2,5]
輸出: True
限制:
陣列長度為 5
陣列的數取值為 [0, 13] .
思路
我首先將陣列排序,然後遍歷此陣列,如果當前數字是0,計算數字為0的個數。如果不是0,就計算前後的數字的差值;
因為陣列完成了排序,所以此差值不會為負數,那麼用此差值減去0的個數,表示0的個數是否能填充此差值,如果0的個數為負數,則表示不能填充了,返回false;其餘情況下為true;
程式碼
class Solution { public: bool isStraight(vector<int>& nums) { sort(nums.begin(), nums.end()); int zeroNums = 0, pre = 0; for (int &x:nums) { if (x == 0) { ++zeroNums; } else if (pre != 0) { int gap = x-pre-1; if (gap == -1) return false; zeroNums = zeroNums-gap; if (zeroNums < 0) { return false; } } pre = x; } return true; } };