LeetCode67 二进制求和解题笔记
题目原题地址:LeetCode 67.二进制求和
题目描述
给你两个二进制字符串 a 和 b,以二进制字符串的形式返回它们的和。
例:输入
a="11",b="1",输出"100"
思路一:BigInteger大数类简便解法(不推荐)
解题核心思路
- 入参是二进制格式字符串,无法直接用
int/long转换(超长二进制会超出基本数据类型存储上限,溢出报错); - 使用
BigInteger可以存储无限长度的数字,构造方法第二个参数radix=2:代表按照二进制规则解析字符串为十进制大数; - 调用
BigInteger.add()完成大数加法运算; - 结果调用
toString(2):将相加后的十进制大数,重新转换回二进制字符串,作为最终返回值。
Java实现代码
import java.math.BigInteger;
class Solution {
public String addBinary(String a, String b) {
//思路:二进制字符串 → BigInteger十进制大数 → 大数相加 → 转回二进制字符串
//1.构造方法第二个参数2:标识原字符串是二进制格式
BigInteger b1 = new BigInteger(a,2);
BigInteger b2 = new BigInteger(b,2);
//2.BigInteger自带add方法完成加法
BigInteger res = b1.add(b2);
//3.toString(2):将十进制大数转为二进制字符串
return res.toString(2);
}
}