自己先写了一个二进制转换int的,写的时候就想到存在溢出的问题,测试的时候果然数一大就溢出了
class Solution {
public String addBinary(String a, String b) {
int suma=0, sumb=0;
for(int i=0; i < a.length();i++) {
if(a.charAt(i) == '1')
suma = suma + ((int)Math.pow(2,a.length()-i-1)) * Character.getNumericValue(a.charAt(i));
}
System.out.println(suma);
for(int j=0; j < b.length();j++) {
if(b.charAt(j) == '1')
sumb = sumb + ((int)Math.pow(2,b.length()-j-1)) * Character.getNumericValue(b.charAt(j));
}
System.out.println(sumb);
return Integer.toBinaryString(suma + sumb);
}
}
之后去评论区参考大神的写法,这个算法非常快,比100%的人都快,因为两个原因:1.全部用比特位操作:与运算和位移运算 2.把字符串转换成char数组
代码如下:
class Solution {
public String addBinary(String a, String b) {
if(a.length() < b.length())
return addBinary(b,a);
char[] ret = a.toCharArray();
int i=1,c=0;
while(i <= a.length()){
c += (a.charAt(a.length() - i) == '1') ? 1 : 0;
c += (b.length() - i >=0 && b.charAt(b.length() - i) == '1') ? 1 : 0;
ret[a.length() - i] = (char) ((c & 1) + '0');
c = c >> 1;
i++;
}
return c == 1 ? '1' + new String(ret) : new String(ret);
}
}