lc.002.二进制加法
Difficulty: **给定两个 01 字符串 a 和 b ,请计算它们的和,并以二进制字符串的形式输出。 输入为 非空 字符串且只包含数字 1 和 0。 示例 1: 输入: a = “11”, b = “10” 输出: “101” 示例 2: 输入: a = “1010”, b = “1011” 输出: “10101” 提示: 每个字符串仅由字符 ‘0’ 或 ‘1’ 组成。 1 <= a.length, b.length <= 10^4 字符串如果不是 “0” ,就都不含前导零。 注意:本题与主站 67 题相同:https://leetcode-cn.com/problems/add-binary/ **
给定两个 01 字符串 a
和 b
,请计算它们的和,并以二进制字符串的形式输出。
输入为 非空 字符串且只包含数字 1
和 0
。
示例 1:
1
2
|
输入: a = "11", b = "10"
输出: "101"
|
示例 2:
1
2
|
输入: a = "1010", b = "1011"
输出: "10101"
|
提示:
- 每个字符串仅由字符
'0'
或 '1'
组成。
1 <= a.length, b.length <= 10^4
- 字符串如果不是
"0"
,就都不含前导零。
注意:本题与主站 67 题相同:
Solution
Language: ****
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
func reverse(a []int) {
var n = len(a)
for i:=0;i< n>>1;i++ {
a[i],a[n-i -1] = a[n-i-1],a[i]
}
}
func reverse0(a []byte) {
var n = len(a)
for i:=0;i< n>>1;i++ {
a[i],a[n-i -1] = a[n-i-1],a[i]
}
}
func max(a ,b int) int{
if a > b {
return a
}
return b
}
func addBinary(a string, b string) string {
var s1 = make([]int,len(a))
var s2 = make([]int,len(b))
for i,v := range a {
s1[i] = int(v-'0')
}
for i,v := range b {
s2[i] = int(v-'0')
}
reverse(s1)
reverse(s2)
//var res []int
// var rest int
var n,m = len(s1),len(s2)
//
s := strings.Builder{}
var x = 0
for i:=0;i<max(n,m);i++ {
if i<n {
x += s1[i]
}
if i<m {
x += s2[i]
}
s.WriteRune( rune((x%2) + '0'))
x /= 2
}
if x > 0 {
s.WriteRune('1')
}
var res []byte
res = []byte(s.String())
reverse0(res)
return string(res)
}
|