[每日一題] 第十二題:撲克牌中的順子

DRose發表於2020-07-31

從撲克牌中隨機抽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 的數字,如果 差值 > 1,就用 0 填充,如果 差值 = 0,返回 false,如果 零的個數 < 0,返回 false

程式碼

class Solution {
    public boolean isStraight(int[] nums) {
        Arrays.sort(nums); //給陣列排序
        int zeroCount = 0; // 0 的數量
        for (int i = 0; i < 5; i++) {
            if (nums[i] == 0) {
                zeroCount++;
            }
        }

        for (int i = zeroCount + 1; i < 5; i++) { // i = zeroCount + 1;因為要和它的前一個數字比較,所以 i 的起始值為 第二個不為 0 的元素
            int dif = nums[i] - nums[i-1]; //前後兩個元素的差值
            zeroCount = zeroCount - dif + 1; //相差一應該加一
            if (zeroCount < 0 || dif == 0) { //count<0 說明沒有任意數字補上了,dif=0 說明有兩個數字相等
                return false;
            }

        }
        return true;        
    }
}

來源:力扣(LeetCode)
連結:leetcode-cn.com/problems/bu-ke-pai...

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章