Q67 Add Binary

自己先写了一个二进制转换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);
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_44015873/article/details/86645632
今日推荐