您的位置:首页 > 其它

lintcode 二进制求和 给定两个二进制字符串,返回他们的和(用二进制表示)。

2016-02-21 18:06 309 查看


Lintcode容易题


二进制求和
查看运行结果 

15:00
 Start
给定两个二进制字符串,返回他们的和(用二进制表示)。

您在真实的面试中是否遇到过这个题? 

Yes

样例

a = 
11

b = 
1

返回 
100


标签 Expand 

字符串处理 二进制 脸谱网
public class Solution {
/**
* @param a a number
* @param b a number
* @return the result
*/
public String addBinary(String a, String b) {

//java代码思路:
/*和求两个链表的和很类似

考虑进位,考虑最后一项的进位

0+0 = 0 不需要进位

0+1 = 1 不需要进位

1+1 =0  进位 1

同时注意

低位进1,高位时1+1的情况,直接加就是3了,这个需要进位1 ,原位的结果也是1的情况
*/

// Write your code here

String result = "";
int aLen = a.length() - 1;
int bLen = b.length() - 1;
int sum = 0;
while(aLen>=0 || bLen>=0){
if(aLen>=0){
sum +=Integer.parseInt(a.substring(aLen,aLen+1));
aLen--;
}
if(bLen>=0){
sum +=Integer.parseInt(b.substring(bLen,bLen+1));
bLen--;
}
if(sum==2){
result = "0" + result;
sum=1;
}else if(sum==0 || sum==1) {
result = sum +"" + result;
sum = 0;
}else if(sum==3){
result = "1" + result;
sum = 1;
}
}
if(sum==1)
result = "1" + result;
return result;

}
}
</pre><p>C++代码:</p><p></p><p></p><pre name="code" class="cpp">class Solution {
public:
/**
* @param a a number
* @param b a number
* @return the result
*/
string addBinary(string& a, string& b) {
// Write your code here
string result = "";
int c = 0, num = 0;
int i = a.size() - 1, j = b.size() - 1;
for (; i >= 0 && j >= 0; i--, j--){
num = (a[i] - '0') + (b[j] - '0') + c;
c = num / 2;
num = num % 2;
result += ('0' + num);
}
for (; i >= 0; i--){
num = (a[i] - '0') + c;
c = num / 2;
num = num % 2;
result += ('0' + num);

}
for (; j >= 0; j--)
{
num = (b[j] - '0') + c;
c = num / 2;
num = num % 2;
result += ('0' + num);

}
if (c != 0)	{
result += ('0' + c);
}
i = 0; j = result.size() - 1;
while (i < j){
char temp = result[i];
result[i] = result[j];
result[j] = temp;
i++; j--;

b0fa
}
return result;

}

};
//int main(){	string s1 = "11";	string s2 = "1";	Solution st;	cout << st.addBinary(s1, s2);	return 0;}
整理的题目的相应的C++和java的源代码

    

    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息