《JAVA》撲克牌的順子問題

 

題目:

從撲克牌中隨機抽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;
		
	}
}

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章