题目描述:
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1
和 0
。
示例 1:
输入: a = "11", b = "1" 输出: "100"
示例 2:
输入: a = "1010", b = "1011" 输出: "10101"
代码:
class Solution {
public String addBinary(String a, String b) {
char[] cha=a.toCharArray();
char[] chb=b.toCharArray();
StringBuilder sb=new StringBuilder();
int k1=cha.length-1,k2=chb.length-1;
int carry=0,temp;
while(k1>=0&&k2>=0){
temp=(cha[k1]-'0')+(chb[k2]-'0')+carry;
sb.append((char)(temp%2+'0'));
carry=temp/2;
k1--;
k2--;
}System.out.println(sb);
while(k1>=0){
temp=carry+cha[k1]-'0';
sb.append((char)(temp%2+'0'));
carry=temp/2;
k1--;
}
while(k2>=0){System.out.println("k2="+k2);
temp=carry+chb[k2]-'0';
sb.append((char)(temp%2+'0'));
carry=temp/2;
k2--;
}
if(carry>0)
sb.append('1');
return sb.reverse().toString();
}
Java还是不熟呀,每次码完都要改半天。'1'-'0'=1,‘1’+0=49 ,(char)48='0',(char)0=‘ ’(无);总结,字符和数字一起运算字符要转化为ASCII值参与运算。若,sb="",sb.append(48),结果sb="48",而不是sb="0",所以append不会自动将ASCII值转化为字符,切记!