技術メモ

神奈川在住のITエンジニアの備忘録。おもにプログラミングやネットワーク技術について、学んだことを自分の中で整理するためにゆるゆると書いています。ちゃんと検証できていない部分もあるのでご参考程度となりますが、誰かのお役に立てれば幸いです。

leetCode:67. Add Binary

leetCode の「67. Add Binary」を解いた。
https://leetcode.com/problems/add-binary/

Java の char 型の引き算の結果の型など、気を付ける点があったので、ここに解答を残しておく。

    public String addBinary(String a, String b) {
        StringBuilder sb = new StringBuilder();
        int i = a.length() - 1;
        int j = b.length() - 1;
        int carry = 0;
        while (i >= 0 || j >= 0) {
            int sum = carry;
            if (i >= 0) {
                // char 同士の引き算の結果は int になる。
                // '0' - '0' = 0
                // '1' - '0' = 1
                int curNum = a.charAt(i) - '0';
                sum += curNum;
            }
            if (j >= 0) {
                int curNum = b.charAt(j) - '0';
                sum += curNum;
            }
            // sb.insert(0, sum % 2) としたら速度が落ちたので、append して最後に reverse している。
            sb.append(sum % 2);
            carry = sum / 2;
            i--;
            j--;
        }

        // 最後の carry が立っていたら、1 を追加。
        if (carry != 0) {
            sb.append(carry);
        }
        return sb.reverse().toString();
    }