67. Add Binary

原题链接:https://leetcode.com/problems/add-binary/description/
哎,直接看代码吧:

/**
 * Created by clearbug on 2018/2/26.
 */
public class Solution {

    public static void main(String[] args) {
        Solution s = new Solution();
        System.out.println(s.addBinary1("1", "11"));
        System.out.println(s.addBinary1("10", "11"));
        System.out.println(s.addBinary2("1", "11"));
        System.out.println(s.addBinary2("10", "11"));
    }

    /**
     * 我自己的解法,又他么是猪一样的思路。。。
     *
     * @param a
     * @param b
     * @return
     */
    public String addBinary1(String a, String b) {
        StringBuilder res = new StringBuilder("");

        char[] aChars = a.toCharArray();
        char[] bChars = b.toCharArray();

        boolean carry = false;

        int i = aChars.length - 1, j = bChars.length - 1;
        while (i >= 0 && j>= 0) {
            if (carry) {
                if (aChars[i] == '1' && bChars[j] == '1') {
                    res.append('1');
                } else if (aChars[i] == '0' && bChars[j] == '0') {
                    carry = false;
                    res.append('1');
                } else {
                    res.append('0');
                }
            } else {
                if (aChars[i] == '1' && bChars[j] == '1') {
                    carry = true;
                    res.append('0');
                } else if (aChars[i] == '0' && bChars[j] == '0') {
                    res.append('0');
                } else {
                    res.append('1');
                }
            }
            i--;
            j--;
        }

        if (i == -1) {
            while (j >= 0) {
                if (carry) {
                    if (bChars[j] == '1') {
                        res.append('0');
                    } else {
                        carry = false;
                        res.append('1');
                    }
                } else {
                    res.append(bChars[j]);
                }
                j--;
            }
        } else {
            while (i >= 0) {
                if (carry) {
                    if (aChars[i] == '1') {
                        res.append('0');
                    } else {
                        carry = false;
                        res.append('1');
                    }
                } else {
                    res.append(aChars[i]);
                }
                i--;
            }
        }
        if (carry) {
            res.append("1");
        }

        return res.reverse().toString();
    }

    /**
     * 官方讨论区别人的答案,确实是简洁优雅
     *
     * @param a
     * @param b
     * @return
     */
    public String addBinary2(String a, String b) {
        StringBuilder res = new StringBuilder("");

        int carry = 0;
        int i = a.length() - 1;
        int j = b.length() - 1;

        while (i >= 0 || j >= 0) {
            int sum = carry;
            if (i >= 0) {
                sum += a.charAt(i--) - '0';
            }
            if (j >= 0) {
                sum += b.charAt(j--) - '0';
            }
            carry = sum / 2;
            res.append(sum % 2);
        }

        if (carry != 0) {
            res.append(carry);
        }
        return res.reverse().toString();
    }

}
posted @ 2018-03-15 21:24  optor  阅读(135)  评论(0编辑  收藏  举报