给定两个二进制字符串,返回他们的和(用二进制表示)。
a = 11
b = 1
返回 100
/*
思路:
和求两个链表的和很类似 ,考虑进位,考虑最后一项的进位
0+0 = 0 不需要进位 0+1 = 1 不需要进位 1+1 =0 进位 1
同时注意 低位进1,高位时1+1的情况,直接加就是3了,
这个需要进位1 ,原位的结果也是1的情况
*/
public class Solution {
public String addBinary(String a, String b) {
int alen = a.length()-1;
int blen = b.length()-1;
int carries = 0;//进位
String rst = "";
while(blen >= 0&&alen >=0){//因为a>b
int sum = (int)(a.charAt(alen) - '0') +
(int)(b.charAt(blen) - '0') + carries;
//char ch='0'; ch的值是字符'0'的ascii码值,即0x30
//String s = "110";int c =(int) (s.charAt(1)-0);//0 则c =49
//如果是0,只是加进位,不是的话可以再加原来的
rst = String.valueOf(sum % 2) + rst;//
carries = sum / 2;
alen --;
blen --;
}
while(alen >= 0){//只有alen的时候
int sum = (int)(a.charAt(alen) - '0') + carries;
rst = String.valueOf(sum % 2) + rst;
carries = sum / 2;
alen --;
}
while(blen >= 0){//只有alen的时候
int sum = (int)(b.charAt(blen) - '0') + carries;
rst = String.valueOf(sum % 2) + rst;
carries = sum / 2;
blen --;
}
if (carries == 1)//最后的时候
rst = '1' + rst;
return rst;
}
}