leetcode做题笔记----67. 二进制求和

leetcode[67. 二进制求和]

给你两个二进制字符串,返回它们的和(用二进制表示)。

输入为 非空 字符串且只包含数字 1 和 0。

示例 1:

输入: a = “11”, b = “1”
输出: “100”

示例 2:

输入: a = “1010”, b = “1011”
输出: “10101”

解题:

1两个字符串长度要保持一致,少掉的要用0补全

2字符串计算完后,字符串是倒着的,你要reverse翻转

代码:

public static String addBinary(String a, String b) {
        StringBuilder sb = new StringBuilder();
        int flag=0;
        for (int i = a.length() - 1, j = b.length() - 1; i >= 0 || j >= 0; i--, j--) {
            int sum=flag;
            sum += (i >= 0 ? a.charAt(i) - '0' : 0); //用charAt获得i位的值是字符,用ASCII码值-‘0’的ASCII码值得到一个整数
            sum += (j >= 0 ? b.charAt(j) - '0' : 0);
            sb.append(sum%2);//两个位置都是1 相加为2则进1变0   	
            flag=sum/2;//   给下一位进1
        }
        sb.append(flag == 1 ? flag : "");
        return sb.reverse().toString();
    }
    public static void main(String[] args) {
        String a="11";
        String b = "1";
        String c = "1010";
        String d = "1011";
        System.out.println(addBinary(a, b));
        System.out.println(addBinary(c, d));
    }

你可能感兴趣的:(leetcode)