【Java】 劍指offer(61) 撲克牌的順子


 

本文參考自《劍指offer》一書,代碼采用Java語言。

更多:《劍指Offer》Java實現合集  

題目

  從撲克牌中隨機抽5張牌,判斷是不是一個順子,即這5張牌是不是連續的。2~10為數字本身,A為1,J為11,Q為12,K為13,而大、小王可以看成任意數字。

思路

  輸入為大小等於5的數組(大小王記為0),輸出為布爾值。具體步驟如下:

  1)進行對5張牌進行排序;

  2)找出0的個數;

  3)算出相鄰數字的空缺總數;

  4)如果0的個數大於等於空缺總數,說明連續,反之不連續;

  5)記得判斷相鄰數字是否相等,如果有出現相等,說明不是順子。

 

測試算例 

  1.功能測試(沒有/有一個/多個大小王,有對子,連續/不連續)

  2.特殊測試(null)

 

Java代碼

//題目:從撲克牌中隨機抽5張牌,判斷是不是一個順子,即這5張牌是不是連續的。
//2~10為數字本身,A為1,J為11,Q為12,K為13,而大、小王可以看成任意數字。

public class ContinousCards {
    public boolean isContinuous(int [] numbers) {
        if(numbers==null || numbers.length<=0)
            return false;
        Arrays.sort(numbers);
        int numberOf0 = 0;
        int numberOfGap = 0;
        for(int i=0;i<numbers.length;i++){
            if(numbers[i]==0)
                numberOf0++;
        }
        int small = numberOf0;
        int big = numberOf0+1;
        while(big<numbers.length){
            if(numbers[small]==numbers[big])
                return false;
            numberOfGap+=numbers[big++]-numbers[small++]-1;
        }
        if(numberOf0>=numberOfGap)  //大於等於,而不是等於!
            return true;
        return false;
    }
}

 

收獲

  1.這道題中,自己最開始想的是把0插入到空缺當中,當其實只要計算出0的個數和空缺的個數進行比較即可,有時候稍微轉換一下思路就豁然開朗了。

  2.對數組排序,采用Arrays.sort(numbers)方法(快排原理)。

 

更多:《劍指Offer》Java實現合集  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM