LeetCode67 二进制求和解题笔记

题目原题地址:LeetCode 67.二进制求和

题目描述

给你两个二进制字符串 ab,以二进制字符串的形式返回它们的和。

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

思路一:BigInteger大数类简便解法(不推荐)

解题核心思路

  1. 入参是二进制格式字符串,无法直接用int/long转换(超长二进制会超出基本数据类型存储上限,溢出报错);
  2. 使用BigInteger可以存储无限长度的数字,构造方法第二个参数radix=2:代表按照二进制规则解析字符串为十进制大数
  3. 调用BigInteger.add()完成大数加法运算;
  4. 结果调用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);
    }
}

❌ 缺点:面试不推荐作为标准答案