剑指 Offer II 002. 二进制加法

难度简单49收藏分享切换为英文接收动态反馈

给定两个 01 字符串 ab ,请计算它们的和,并以二进制字符串的形式输出。

输入为 非空 字符串且只包含数字 10

示例 1:

输入: a = "11", b = "10"
输出: "101"

示例 2:

输入: a = "1010", b = "1011"
输出: "10101"

提示:

  • 每个字符串仅由字符 '0''1' 组成。
  • 1 <= a.length, b.length <= 10^4
  • 字符串如果不是 "0" ,就都不含前导零。

题解:

public class Solution {
    public String addBinary(String a, String b) {
        //调用Stringbuilder 的reserse()方法
        StringBuilder result=new StringBuilder();
        int i=a.length()-1;
        int j=b.length()-1;
        int carry=0;
        while(i>=0 || j>=0){
            //当只有一个i或j走完后的情况
            int digitA=i>=0?a.charAt(i--)-'0':0;
            int digitB=j>=0?b.charAt(j--)-'0':0;

            int sum=digitA+digitB+carry;
            carry=sum>=2?1:0;
            sum=sum>=2?sum-2:sum;
            result.append(sum);
        }
        if(carry==1){
            result.append(1);
        }
        return result.reverse().toString();
    }
}
Last modification:October 15th, 2022 at 05:20 pm
如果觉得我的文章对你有用,请随意赞赏