LeetCode 二進位制求和(Add Binary)
阿新 • • 發佈:2018-12-24
題目
給定兩個二進位制字串,返回他們的和(用二進位制表示)。
輸入為非空字串且只包含數字 1 和 0。
示例
示例 1:
輸入: a = “11”, b = “1”
輸出: “100”
示例 2:
輸入: a = “1010”, b = “1011”
輸出: “10101”
思路
將二進位制字串從後到前依次相加,根據結果來新字串賦值。
public String addBinary(String a, String b) {
String result ="";
int sum=0;
int alength = a.length();
int bLength = b.length();
while(alength>0 || bLength>0){
if(alength>0){
sum+=Integer.parseInt(a.substring(alength-1,alength)) ;
alength--;
}
if(bLength>0){
sum+=Integer.parseInt(b.substring(bLength-1,bLength)) ;
bLength-- ;
}
if(sum==3){
result="1"+result;
sum=1;
}else if(sum==2){
result="0"+result;
sum=1;
}else{
result=""+sum+result;
sum=0;
}
}
if (sum==1){
result="1"+result;
}
return result;
}
優化思路: 以數字的形式進行進行賦值
public String addBinary(String a, String b) {
int al = a.length();
int bl = b.length();
int mer = 0;
int sub = Math.max(al, bl);
char[] resCh = new char[sub+1];
for(int i=0; i<sub+1; i++){
int ai = (al>i)?(a.charAt(al-1-i)-'0'):0;
int bi = bl>i?(b.charAt(bl-1-i)-'0'):0;
mer = ai + bi + mer;
resCh[sub-i] = (char)(mer%2+'0');
mer = mer/2;
}
int bal = '1' - resCh[0];
return new String(resCh, bal, resCh.length-bal);
}