LeetCode刷题笔记(Java版)----67、二进制求和

67、二进制求和

描述:给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。

解法1:比较粗暴的方法,先找到较短的字符串,从右网左扫描。对应依次相加(**注意字符转整形 -‘0’!)后插入到StringBuilder的头中,分三种情况:《=1就直接存到StringBuilder ,不进位。等于2时,replace头为0,同时进位。等于3时,replace头为1,同时进位。循环次数为短的字符串长度,循环结束则只剩较长的字符串,依次加入。最后要判断是否有进位,有则头补充1.

执行用时: 8 ms, 33.00% 。内存消耗: 26.6 MB, 14.91% 。

class Solution {
    public String addBinary(String a, String b) {
        StringBuilder sb = new StringBuilder();
        int i ;
        int a1=a.length()-1;
        int a2=b.length()-1;
        if(a.length()>=b.length()){
            i = b.length();
        }else{
            i=a.length();
        }
        int add = 0;
        while(i>0){
            sb.insert(0,a.charAt(a1)-'0'+b.charAt(a2)-'0'+add);
            if(sb.charAt(0)-'0'>1){
                 if(sb.charAt(0)-'0'==2){
                    sb.replace(0,1,"0");
                    add = 1;
                }else{
                    sb.replace(0,1,"1");
                    add = 1;
                 }
            }else{
                add = 0;
            }
            a1--;
            a2--;
            i--;
        }
        while(a1>a2 && a1>=0){
            sb.insert(0,a.charAt(a1)-'0'+add);
            if(sb.charAt(0)-'0'>1){
                sb.replace(0,1,"0");
                add = 1;
            }else{
                add = 0;
            }
            a1--;
        }
        while(a2>a1 && a2>=0){
            sb.insert(0,b.charAt(a2)-'0'+add);
            if(sb.charAt(0)-'0'>1){
                sb.replace(0,1,"0");
                add = 1;
            }else{
                add = 0;
            }
            a2--;
        }
        if(add==1){
            sb.insert(0,1);
        }
        return sb.toString();
    }
}

 

 解法2:稍微优化的解法,使用一个while循环完成所有的相加操作,当a或者b的长度>=0时,当短的加完的时候,两个if会只相加长的剩余二进制,另外一个if不执行。sum时两个二进制字符相加在加上进位的值,进行取余操作0%2=0,1%2=1,2%2=0,3%2=1正好时当前相加后需要保留的值,进位则用sum/2表示。

执行用时 : 5 ms, 74.74% 。内存消耗 : 34.9 MB,75.57% 

class Solution {
    public String addBinary(String a, String b) {
        StringBuffer sb = new StringBuffer();
        int a1 = a.length()-1;
        int b1 = b.length()-1;
        int add=0;
        while(a1>=0 || b1>=0){
            int sum =add;
            if(a1>=0){
                sum = sum+a.charAt(a1)-'0';
                a1--;
            }
            if(b1>=0){
                sum = sum +b.charAt(b1)-'0';
                b1--;
            }
            sb.append(sum%2);
            add=sum/2;
        }
        if(add!=0)
            sb.append(1);
        return sb.reverse().toString();
    }
}

 

你可能感兴趣的:(Algorithm)