一、Description:
Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100"
.
二、Ideas:
这道题的目的是计算两个字符串所表示的二进制数字之和(也是二进制字符串表示)。先判断出两个字符串的长短,之后,按a长还是b长分情况,每一种情况中从后往前遍历字符串,进行位加和,并记录进位,当长串首字符遍历结束后,判断此时有无进位,决定结果字符串的首字符。
三、Code:
class Solution {
public String addBinary(String a, String b) {
int c=0;
int mark=0;
int mark2=0;
String str=new String();
if(a.length()<b.length()) mark=1;
if(mark==0){
int j=b.length()-1;
for(int i=a.length()-1;i>=0;i--){
if(j>=0){
if(a.charAt(i)=='0'&&b.charAt(j)=='0'){
str=String.valueOf(c)+str;
c=0;
}
else if(a.charAt(i)=='1'&&b.charAt(j)=='1'){
str=String.valueOf(c)+str;
c=1;
}
else if(c==0) str="1"+str;
else{
str="0"+str;
c=1;
}
}
else{
if(a.charAt(i)=='1'&&c==1){
str="0"+str;
c=1;
}
else if(a.charAt(i)=='0'&&c==0) str="0"+str;
else {
str="1"+str;
c=0;
}
}
j--;
}
if(c==1) str="1"+str;
}
else{
int j=a.length()-1;
for(int i=b.length()-1;i>=0;i--){
if(j>=0){
if(b.charAt(i)=='0'&&a.charAt(j)=='0') {
str=String.valueOf(c)+str;
c=0;
}
else if(b.charAt(i)=='1'&&a.charAt(j)=='1'){
str=String.valueOf(c)+str;
c=1;
}
else if(c==0) str="1"+str;
else{
str="0"+str;
c=1;
}
}
else{
if(b.charAt(i)=='1'&&c==1){
str="0"+str;
c=1;
}
else if(b.charAt(i)=='0'&&c==0) str="0"+str;
else {
str="1"+str;
c=0;
}
}
j--;
}
if(c==1) str="1"+str;
}
return str;
}
}