從撲克牌中隨機抽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 協議》,轉載必須註明作者和本文連結