本文參考自《劍指offer》一書,代碼採用Java語言。html
更多:《劍指Offer》Java實現合集 java
從撲克牌中隨機抽5張牌,判斷是否是一個順子,即這5張牌是否是連續的。2~10爲數字自己,A爲1,J爲11,Q爲12,K爲13,而大、小王能夠當作任意數字。數組
輸入爲大小等於5的數組(大小王記爲0),輸出爲布爾值。具體步驟以下:post
1)進行對5張牌進行排序;測試
2)找出0的個數;url
3)算出相鄰數字的空缺總數;htm
4)若是0的個數大於等於空缺總數,說明連續,反之不連續;blog
5)記得判斷相鄰數字是否相等,若是有出現相等,說明不是順子。排序
測試算例 get
1.功能測試(沒有/有一個/多個大小王,有對子,連續/不連續)
2.特殊測試(null)
//題目:從撲克牌中隨機抽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)方法(快排原理)。