剣指offer 66のトランプ順子(java)

1236 ワード

今日、彼はトランプを买いに行ったので、中には大王が2人、王さんが2人いることに気づきました.彼はランダムに中から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だと思います.
解題の構想はまず王(0)の数を統計して、それから札を並べて、もし後ろの1つの数が前の1つの数より1以上大きいならば、中間の差は王で補わなければなりません.王の数が足りないのを見て、足りなければtrueに戻って、さもなくばfalseに戻ります.
コード実装
import java.util.Arrays;
public class Solution {
    public boolean isContinuous(int [] numbers) {
        int zero = 0, dis = 0;
        if(numbers.length != 5)
            return false;
        Arrays.sort(numbers);
        for(int i = 0; i < 4; i++){
            if(numbers[i] == 0){
                zero ++;
                continue;
            }
            if(numbers[i] == numbers[i+1])
                return false;
            if(numbers[i+1] - numbers[i] > 1){
                dis += numbers[i+1] - numbers[i] - 1;
            }
        }
        if(zero >= dis)
            return true;
        else
            return false;
    }
}