Lintcode容易题
二进制求和
15:00
给定两个二进制字符串,返回他们的和(用二进制表示)。
样例
标签
Expand
a = 11
b = 1
返回 100
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--;
}
return result;
}
};
//int main(){ string s1 = "11"; string s2 = "1"; Solution st; cout << st.addBinary(s1, s2); return 0;}
整理的题目的相应的C++和java的源代码