2017年9月6日水曜日

BinaryGap(Lesson1)

問題

コード1

  1. 2進数に変換(Integer#toBinaryString)
  2. 文字列を char型の配列に変換( String#toCharArray)
public int solution(int N) {

    char[] chars = Integer.toBinaryString(N).toCharArray();

    int gap = 0;
    int count = 0;
    for (char num : chars) {
        if (num == '0') {
            count++;
        } else {
            if (count > gap) {
                gap = count;
            }
            count = 0;
        }
    }
    return gap;
}

コード2

  • コード1ではchar型の配列でループしていたが「1」で文字列を分割する

    1. 文字列の最後、全て「0」を削除( String#replaceAll)
    2. 「1」で文字列を分割する( String#split)
public int solution(int N) {

    String[] strings = Integer.toBinaryString(N)
            .replaceAll("0+$", "")
            .split("1");

    int gap = 0;
    for (String str : strings) {
        int count = str.length();
        if (count > gap) {
            gap = count;
        }
    }
    return gap;
}

コード3

  • コード2をjava8に変換
public int solution(int N) {

    return Stream.of(Integer.toBinaryString(N)
            .replaceAll("0+$", "")
            .split("1"))
            .max((e1, e2) -> Integer.compare(e1.length(), e2.length()))
            .map(e -> e.length())
            .orElse(0);
}

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。