劍指offer第二版-61.撲克牌中的順子

本系列導航:劍指offer(第二版)java實現導航帖

面試題61:撲克牌中的順子

題目要求:
抽取5張牌,判斷是不是一個順子。2-10為數字本身,A為1,J為11,Q為12,K為13,大小王可堪稱任意數字。

解題思路:
將1-10,J,Q,K記作1-13,大小王記作0,0可以轉化為任意的1-13的數字,判斷輸入的5個數字是否能組成連續的5個數字即可。

package chapter6;

/**
 * Created with IntelliJ IDEA
 * Author: ryder
 * Date  : 2017/8/20
 * Time  : 14:59
 * Description:撲克牌中的順子
 **/
public class P298_ContinousCards {
    public static boolean isContinous(int[] data){
        if(data==null || data.length!=5)
            return false;
        int[] table = new int[14];
        for(int i=0;i<data.length;i++){
            if(data[i]>13||data[i]<0)
                return false;
            table[data[i]]++;
        }
        int start = 1;
        while (table[start]==0)
            start++;
        int king = table[0];
        for(int i=start;i<start+5;i++){
            if(i>13)
                break;
            if(table[i]>1||table[i]<0)
                return false;
            else if(table[i]==0){
                if(king==0)
                    return false;
                else
                    king--;
            }
        }
        return true;
    }
    public static void main(String[] args){
        int[] data1 = new int[]{4,2,7,12,1}; //false
        int[] data2 = new int[]{0,5,6,12,0}; //false
        int[] data3 = new int[]{6,5,8,7,4};  //true
        int[] data4 = new int[]{0,5,6,9,8};  //true
        int[] data5 = new int[]{0,13,0,12,0}; //true
        System.out.println(isContinous(data1));
        System.out.println(isContinous(data2));
        System.out.println(isContinous(data3));
        System.out.println(isContinous(data4));
        System.out.println(isContinous(data5));
    }
}

運行結果

false
false
true
true
true
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容