leetcode67 Add Binary-zh
# 67. 二进制求和 (opens new window)
English Version (opens new window)
# 题目描述
给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1
和 0
。
示例 1:
输入: a = "11", b = "1" 输出: "100"
示例 2:
输入: a = "1010", b = "1011" 输出: "10101"
提示:
- 每个字符串仅由字符
'0'
或'1'
组成。 1 <= a.length, b.length <= 10^4
- 字符串如果不是
"0"
,就都不含前导零。
# 解法
# Python3
class Solution:
def addBinary(self, a: str, b: str) -> str:
return bin(int(a, 2) + int(b, 2))[2:]
1
2
3
2
3
# Java
class Solution {
public String addBinary(String a, String b) {
StringBuilder sb = new StringBuilder();
int i = a.length() - 1, j = b.length() - 1, carry = 0;
while (i >= 0 || j >= 0 || carry != 0) {
int s = carry + (i >= 0 ? a.charAt(i) - '0' : 0) + (j >= 0 ? b.charAt(j) - '0' : 0);
sb.append(s % 2);
carry = s / 2;
--i;
--j;
}
return sb.reverse().toString();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# C#
using System;
using System.Collections.Generic;
public class Solution {
public string AddBinary(string a, string b) {
var list = new List<char>(Math.Max(a.Length, b.Length) + 1);
var i = a.Length - 1;
var j = b.Length - 1;
var carry = 0;
while (i >= 0 || j >= 0)
{
if (i >= 0)
{
carry += a[i] - '0';
}
if (j >= 0)
{
carry += b[j] - '0';
}
list.Add((char)((carry % 2) + '0'));
carry /= 2;
--i;
--j;
}
if (carry > 0) list.Add((char) (carry + '0'));
list.Reverse();
return new string(list.ToArray());
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# Go
func addBinary(a string, b string) string {
for len(a) > len(b) {
b = "0" + b
}
for len(a) < len(b) {
a = "0" + a
}
zero := []byte("0")[0]
ret := make([]byte, len(a))
for right := len(a) - 1; right > 0; right-- {
t := ret[right] + a[right] + b[right] - zero*2
ret[right] = t%2 + zero
if t >= 2 {
ret[right-1] = 1
}
}
t := ret[0] + a[0] + b[0] - zero*2
ret[0] = t%2 + zero
if t >= 2 {
ret = append([]byte("1"), ret...)
}
return string(ret)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# ...
1
编辑 (opens new window)
上次更新: 2021/10/30, 12:58:38