您的位置:首页 > 编程语言 > C语言/C++

LeetCode 67 — Add Binary(C++ Java Python)

2014-02-26 21:18 483 查看
题目:http://oj.leetcode.com/problems/add-binary/

Given two binary strings, return their sum (also a binary string).

For example,

a = 
"11"


b = 
"1"


Return 
"100"
.

题目翻译:

给定两个二进制字符串,返回它们的和(也是一个二进制字符串)。

例如,

a = "11"

b = "1"

返回"100"。

分析:

        注意细节。

C++实现:

class Solution {
public:
string addBinary(string a, string b) {
string str1;
string str2;

if(a.length() >= b.length())
{
str1 = a;
str2 = b;
}
else
{
str1 = b;
str2 = a;
}

int m = str1.length();
int n = str2.length();

char sum[m + 1];
sum[m] = '\0';

int i = m - 1;
char carry = '0';

--m;
--n;

while(n >= 0)
{
if(str1[m] == '0' && str2
== '0')
{
sum[i] = carry;
carry = '0';
}
else if(str1[m] == '1' && str2
== '1')
{
sum[i] = carry;
carry = '1';
}
else
{
if(carry == '0')
{
sum[i] = '1';
}
else
{
sum[i] = '0';
}
}
--m;
--n;
--i;
}

while(m >= 0)
{
if(str1[m] == '1')
{
if(carry == '0')
{
sum[i] = '1';
}
else
{
sum[i] = '0';
}
}
else
{
sum[i] = carry;
carry = '0';
}
--m;
--i;
}

string result = sum;

if(carry == '1')
{
return "1" + result;
}

return result;
}
};

Java实现:

public class Solution {
public String addBinary(String a, String b) {
char[] str1;
char[] str2;

if (a.length() >= b.length()) {
str1 = a.toCharArray();
str2 = b.toCharArray();
} else {
str1 = b.toCharArray();
str2 = a.toCharArray();
}

int m = str1.length;
int n = str2.length;

char[] sum = new char[m];

int i = m - 1;
char carry = '0';

--m;
--n;

while (n >= 0) {
if (str1[m] == '0' && str2
== '0') {
sum[i] = carry;
carry = '0';
} else if (str1[m] == '1' && str2
== '1') {
sum[i] = carry;
carry = '1';
} else {
if (carry == '1') {
sum[i] = '0';
} else {
sum[i] = '1';
}
}

--m;
--n;
--i;
}

while (m >= 0) {
if (str1[m] == '1') {
if (carry == '1') {
sum[i] = '0';
} else {
sum[i] = '1';
}

} else {
sum[i] = carry;
carry = '0';
}
--m;
--i;
}

String result = new String(sum);

if (carry == '1') {
return "1" + result;
}

return result;
}
}

Python实现:

class Solution:
# @param a, a string
# @param b, a string
# @return a string
def addBinary(self, a, b):
if(len(a) >= len(b)):
str1 = a
str2 = b
else:
str1 = b
str2 = a

m = len(str1)
n = len(str2)

sum = ['0' for i in range(m)]

i = m - 1
carry = '0'

m -= 1
n -= 1

while n >= 0:
if str1[m] == '0' and str2
== '0':
sum[i] = carry
carry = '0'
elif str1[m] == '1' and str2
== '1':
sum[i] = carry
carry = '1'
else:
if carry == '0':
sum[i] = '1'
else:
sum[i] = '0'  # not needed

m -= 1
n -= 1
i -= 1

while m >= 0:
if str1[m] == '0':
sum[i] = carry
carry = '0'
else:
if carry == '0':
sum[i] = '1'
else:
sum[i] = '0'  # not needed

m -= 1
i -= 1

if carry == '1':
return "1" + "".join(sum)

return "".join(sum)

        感谢阅读,欢迎评论!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  LeetCode