LeetCode LCR 002. 二进制求和

题目描述

LCR 002. 二进制求和

思路分析

解法一:模拟加法(推荐)

核心思路

  • 从字符串末尾开始逐位相加,维护进位 carry
  • 当前位结果为 sum % 2,进位为 sum / 2
  • 扫描结束后若仍有进位,补到最高位。

复杂度分析

  • 时间复杂度:O(n),其中 n 表示较长字符串长度。
  • 空间复杂度:O(n),其中 n 表示结果字符串长度。
class Solution {
    public String addBinary(String a, String b) {
        int i = a.length() - 1;
        int j = b.length() - 1;
        int carry = 0;
        StringBuilder sb = new StringBuilder();

        // 从低位到高位逐位相加
        while (i >= 0 || j >= 0 || carry != 0) {
            int x = i >= 0 ? a.charAt(i) - '0' : 0;
            int y = j >= 0 ? b.charAt(j) - '0' : 0;

            int sum = x + y + carry;
            sb.append(sum & 1);
            carry = sum >> 1;

            i--;
            j--;
        }

        return sb.reverse().toString();
    }
}
func addBinary(a string, b string) string {
	i := len(a) - 1
	j := len(b) - 1
	carry := 0
	buf := make([]byte, 0)

	// 从低位到高位逐位相加
	for i >= 0 || j >= 0 || carry != 0 {
		x := 0
		y := 0
		if i >= 0 {
			x = int(a[i] - '0')
		}
		if j >= 0 {
			y = int(b[j] - '0')
		}

		sum := x + y + carry
		buf = append(buf, byte(sum&1)+'0')
		carry = sum >> 1

		i--
		j--
	}

	// 结果目前是逆序
	for l, r := 0, len(buf)-1; l < r; l, r = l+1, r-1 {
		buf[l], buf[r] = buf[r], buf[l]
	}
	return string(buf)
}

相似题目

题目 难度 考察点
415. 字符串相加 简单 字符串模拟
43. 字符串相乘 中等 字符串模拟
2. 两数相加 中等 链表、模拟
989. 数组形式的整数加法 简单 数组模拟
66. 加一 简单 数组模拟
本文作者:
本文链接: https://hgnulb.github.io/blog/2026/76190774
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!