題目:
從撲克牌中隨機抽5張牌,判斷是不是順子,即這5張牌是不是連續的。2-10 爲數字本身,A 爲 1,J 爲 11,Q 爲 12,K 爲 13,而大小王可以看成任意的 數字。
解題思路:
我們可以把5張牌看成是由5個數字組成的數組。大小王是特殊的數字,我們可以把它們都定義爲0,這樣就可以和其他的牌區分開來。首先把數組排序,再統計數組中0的個數,最後統計排序之後的數組中相鄰數字之間的空缺總數。如果空缺的總數小於或者等於0的個數,那麼這個數組就是連續的,反之則不連續。如果數組中的非0數字重複出現,則該數組是不連續的。換成撲克牌的描述方式就是如果一幅牌裏含有對子,則不可能是順子。
詳細代碼:
import java.util.Arrays;
public class Solution {
public boolean isContinuous(int[] number){
if(number == null){
return false;
}
Arrays.sort(number);
int numberZero = 0;
int numberGap = 0;
//計算數組中0的個數
for(int i = 0;i < number.length&&number[i] == 0; i++){
numberZero++;
}
//統計數組中的間隔數目
int small = numberZero;
int big = small + 1;
while(big<number.length){
//兩個數相等,有對子,不可能是順子
if(number[small] == number[big]){
return false;
}
numberGap+= number[big] - number[small] - 1;
small = big;
big++;
}
return (numberGap>numberZero)?false:true;
}
}