刚开始的错误思路:
把字符串转化为整数相加,然后再转为字符串,这有可能会出现溢出问题
无论是int还是long类型都有可能溢出
错误代码:
class Solution {
public String addBinary(String a,String b){
int aa=Integer.parseInt(a,2);//parseInt() 方法用于将字符串参数作为有符号的十进制整数进行解析
int bb=Integer.parseInt(b,2);//如果方法有两个参数,使用第二个参数指定的基数,将字符串参数解析为有符号的整数
String c=Integer.toBinaryString(aa+bb);//十进制转化为二进制
return c;
}
}
注意parseInt
函数:用于将字符串参数作为有符号的十进制整数进行解析
如果方法有两个参数,使用第二个参数指定的基数,将字符串参数解析为有符号的整数。
正确思路:用二进制的方法进行加
核心代码:
class Solution {
public String addBinary(String a,String b){
StringBuilder result=new StringBuilder();//把相加的结果放在result中
int carry=0;//carry表示进位情况
int i=a.length()-1,j=b.length()-1;
while(i>=0||j>=0){
int dataA=i>=0?a.charAt(i--)-'0':0;
int dataB=j>=0?b.charAt(j--)-'0':0;
int sum=dataA+dataB+carry;
carry=sum>=2?1:0;
sum=sum>=2?sum-2:sum;//判断sum,若sum>=2,则执行sum-2(此时sum=0或者1)
result.append(sum);
}
if(carry==1)//若最高位>=2,则添加1
result.append(1);
return result.reverse().toString();
}
}
函数charAt()的用法:
其中,StringBuilder与StringBuffer和String区别: