java算法题42502

题目

(2)给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。
示例 1:
输入:a = "11", b = "1"
输出:"100"
示例 2:
输入:a = "1010", b = "1011"
输出:"10101"

解法1 使用Java内置的BigInteger类

Java中的BigInteger类提供了大整数的运算功能,包括加法。我们可以先将二进制字符串转换为BigInteger对象,然后进行加法运算,最后再将结果转换回二进制字符串

import java.math.BigInteger;  
  
public class BinaryAdditionWithBigInteger {  
    public static String addBinary(String a, String b) {  
        BigInteger bigA = new BigInteger(a, 2); // 第二个参数2表示二进制  
        BigInteger bigB = new BigInteger(b, 2);  
        BigInteger sum = bigA.add(bigB);  
        return sum.toString(2); // 转换为二进制字符串  
    }  
  
    public static void main(String[] args) {  
        String a = "11";  
        String b = "1";  
        System.out.println(addBinary(a, b)); // 输出: 100  
  
        a = "1010";  
        b = "1011";  
        System.out.println(addBinary(a, b)); // 输出: 10101  
    }  
}

解法2 模拟手算二进制加法的过程。

从字符串的末尾(最低位)开始,逐位相加,并处理进位

public class BinaryAddition {  
    public static String addBinary(String a, String b) {  
        StringBuilder result = new StringBuilder();  
        int carry = 0; // 进位初始化为0  
        int i = a.length() - 1;  
        int j = b.length() - 1;  
  
        // 从最低位开始逐位相加,直到两个字符串都遍历完  
        while (i >= 0 || j >= 0 || carry > 0) {  
            int sum = carry; // 初始化sum为进位值  
            if (i >= 0) {  
                sum += a.charAt(i--) - '0'; // 将a的当前位转换为数字并加到sum中  
            }  
            if (j >= 0) {  
                sum += b.charAt(j--) - '0'; // 将b的当前位转换为数字并加到sum中  
            }  
            result.append(sum % 2); // 将sum的个位数添加到结果中  
            carry = sum / 2; // 更新进位值  
        }  
  
        // 反转结果字符串,因为我们是从最低位开始添加的  
        return result.reverse().toString();  
    }  
  
    public static void main(String[] args) {  
        String a = "11";  
        String b = "1";  
        System.out.println(addBinary(a, b)); // 输出: 100  
  
        a = "1010";  
        b = "1011";  
        System.out.println(addBinary(a, b)); // 输出: 10101  
    }  
}

这个方法首先创建了一个StringBuilder对象来构建结果字符串。然后,它使用两个指针i和j分别指向字符串a和b的末尾,并初始化进位carry为0。在循环中,它计算当前位的和(包括进位),然后将和的个位数添加到结果字符串中,并更新进位值。循环继续直到两个字符串都遍历完,并且没有剩余的进位。最后,它返回反转后的结果字符串,因为我们是从最低位开始构建的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ThinkPet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值