【leetcode】67. Add Binary(Python & C++)
阿新 • • 發佈:2019-01-23
67. Add Binary
67.1 題目描述:
Given two binary strings, return their sum (also a binary string).
For example,
a = “11”
b = “1”
Return “100”.
67.2 解題思路:
思路一:二進位制相加的情況比較少,只有1、1和1、0和0、0,然後再加上是否進位就可以,所以可以直接列出所有情況,比較簡單,不再討論。
思路二:設定進位flag,同時也作為每次相加的和。然後迴圈,條件是flag==1或者兩個字串有一個沒有遍歷完成。然後每次flag+各字串當前座標下的值-‘0’;最後,將flag%2轉換為字元加到要返回的string前面,並且flag/2獲取下一次的進位值。最後迴圈結束,返回string。
67.3 C++程式碼:
1、思路一程式碼(3ms):
class Solution111 {
public:
string addBinary(string a, string b) {
string sum = "";
int i = a.length() - 1;
int j = b.length() - 1;
int flag = 0;
while (i>=0 && j>=0)
{
if (flag==1)
{
if (a[i] == '1' && b[j] == '1')
{
sum.insert(0, 1, '1');
flag = 1;
}
else if (a[i] == '0' && b[j] == '0')
{
sum.insert(0, 1, '1');
flag = 0;
}
else
{
sum.insert(0, 1, '0');
flag = 1;
}
}
else
{
if (a[i] == '1' && b[j] == '1')
{
sum.insert(0, 1, '0');
flag = 1;
}
else if (a[i] == '0' && b[j] == '0')
{
sum.insert(0, 1, '0');
flag = 0;
}
else
{
sum.insert(0, 1, '1');
flag = 0;
}
}
i--;
j--;
}
if (j==-1)
{
while (i>=0)
{
if (flag == 1 && a[i] == '1')
{
sum.insert(0, 1, '0');
flag = 1;
}
else if (flag == 0 && a[i] == '0')
{
sum.insert(0, 1, '0');
flag = 0;
}
else
{
sum.insert(0, 1, '1');
flag = 0;
}
i--;
}
}
if (i == -1)
{
while (j >= 0)
{
if (flag == 1 && b[j] == '1')
{
sum.insert(0, 1, '0');
flag = 1;
}
else if (flag == 0 && b[j] == '0')
{
sum.insert(0, 1, '0');
flag = 0;
}
else
{
sum.insert(0, 1, '1');
flag = 0;
}
j--;
}
}
if (flag==1)
sum.insert(0, 1, '1');
return sum;
}
};
2、思路二程式碼(3ms):
class Solution111_1 {
public:
string addBinary(string a, string b) {
string sum = "";
int flag = 0;
int i = a.length() - 1;
int j = b.length() - 1;
while (flag==1 || i>=0 || j>=0)
{
if (i >= 0)
flag = flag + a[i--] - '0';
if (j >= 0)
flag = flag + b[j--] - '0';
sum = char(flag%2+'0') + sum;
flag = flag / 2;
}
return sum;
}
};
67.4 Python程式碼:
2、思路二程式碼(49ms)
class Solution(object):
def addBinary(self, a, b):
"""
:type a: str
:type b: str
:rtype: str
"""
sum=""
flag=0
i=len(a)-1
j=len(b)-1
while flag==1 or i>=0 or j>=0:
if i>=0:
flag=flag+ord(a[i])-ord('0')
i-=1
if j>=0:
flag=flag+ord(b[j])-ord('0')
j-=1
sum=str(flag%2)+sum
flag=flag/2
return sum