LintCode - 二进制求和(普通)

版权声明:本文为博主原创文章,未经博主允许不得转载。

难度:容易
要求:

给定两个二进制字符串,返回他们的和(用二进制表示)。
样例
a = 11
b = 1
返回 100

思路:

解题容易,注意边界处理。

public class Solution {
    /**
     * @param a a number
     * @param b a number
     * @return the result
     */
    public String addBinary(String a, String b) {
        if(a.length() < b.length()){//长的换到左边
            String tmp = a;
            a = b;
            b = tmp;
        }
        
        int pa = a.length() - 1;
        int pb = b.length() - 1;
        int carries = 0;//进位
        String rst = "";//返回结果
        
        while(pb >= 0){
            int sum = (int)(a.charAt(pa) - '0') + (int)(b.charAt(pb) - '0') + carries;
            rst = String.valueOf(sum % 2) + rst;//取当前位数
            carries = sum / 2;//取进位数
            pa --;
            pb --;
        }
        
        while(pa >= 0){
            int sum = (int)(a.charAt(pa) - '0') + carries;
            rst = String.valueOf(sum % 2) + rst;
            carries = sum / 2;
            pa --;
        }       
        
        if (carries == 1){
            rst = "1" + rst;
        }  
        return rst;
    }
}

你可能感兴趣的:(LintCode - 二进制求和(普通))