leetcode第67题二进制的求和

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-binary
给定两个二进制字符串,返回他们的和(用二进制表示)。

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

示例 1:

输入: a = "11", b = "1"
输出: "100"
示例 2:

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

这里的难点也就是考虑进位的问题 首先 两者的长度可能不相同 我们必须在短的字符串前面添加0
另外 需要从尾部进行遍历相加 相加结果对2进行取余 就是该位的结果 对2进行整除 那么就是进位
如果产生进位 进位的值需要加到前一位 最后需要判断第一位的进位是不是为1 如果是1的话 那么
还需要添加1

import java.util.Scanner;

public class AddBinaryDemo67 {
public static String addBinary(String a, String b){
StringBuilder sb = new StringBuilder();
int len_a = a.length();
int len_b = b.length();
int carry = 0;
for(int i=len_a-1, j=len_b-1; i>=0||j>=0; i--,j--){
int sum = carry;

        if(i>=0){
            sum+=a.charAt(i)-'0';
        }else{
            sum+=0;
        }
        
        if(j>=0){
            sum+=b.charAt(j)-'0';
        }else{
            sum+=0;
        }
        sb.append(sum%2);
        carry=sum/2;
    }
    if(carry==1){
        sb.append(1);
    }else{
        sb.append("");
    }
    
    return sb.reverse().toString();
}

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    String str = scanner.nextLine();
    String[] str1 = str.split(" ");
    String a = str1[0];
    String b = str1[1];
    String res = addBinary(a, b);
    System.out.println(res);
}

}

//这里说明一下为什么这里会需要进行反转 因为append是从尾部进行添加的 添加后的结果必须进行反转才是正确的返回结果

猜你喜欢

转载自www.cnblogs.com/phantom576/p/11684080.html