撲克牌順子(java)

LL今天心情特別好,因爲他去買了一副撲克牌,發現裏面居然有2個大王,2個小王(一副牌原本是54張_)…他隨機從中抽出了5張牌,想測測自己的手氣,看看能不能抽到順子,如果抽到的話,他決定去買體育彩票,嘿嘿!!“紅心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是順子…LL不高興了,他想了想,決定大\小 王可以看成任何數字,並且A看作1,J爲11,Q爲12,K爲13。上面的5張牌就可以變成“1,2,3,4,5”(大小王分別看作2和4),“So Lucky!”。LL決定去買體育彩票啦。 現在,要求你使用這幅牌模擬上面的過程,然後告訴我們LL的運氣如何, 如果牌能組成順子就輸出true,否則就輸出false。爲了方便起見,你可以認爲大小王是0。

1.由於牌是五張連續的,故當輸入的參數爲空或者長度不爲 5 時,直接返回走人。
2.根據題目描述我們總共有十四種牌, 用空間換時間,創建大小爲 14 的數組,依據輸入元素值更新臨時數組下標位置處的值。
3.定義max、min,來記錄輸入參數的最小值和最大值的差距,由於大小王記爲 0 ,故參數若爲順子,則 max-min 必小於5

    public boolean isContinuous(int [] numbers) {
        if(numbers != null && numbers.length == 5){
            int[] temp = new int[14];
            int max = -1,min = 14//有效防止參數都爲0的情況,因爲只有四張王
            int len = numbers.length;
            for(int i=0; i < len; i++){
                temp[numbers[i]]++;  //先更新臨時數組對應位置處的下標
                if(numbers[i] == 0){
                    continue;  //巧用continue
                }
                if(temp[numbers[i]] > 1){
                    return false;  //倘若臨時數組對應位置的值>1,表明手中牌已經有一個對了,肯定就不會組成順子了
                }
                //更新參數值最大值和最小值
                if(numbers[i] > max){
                    max = numbers[i];
                }
                if(numbers[i] < min){
                    min = numbers[i];
                }
            }
            if((max-min) < 5){
                return true;
            }
        }
        return false;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章