【LeetCode】Add Binary

题目:

Given two binary strings, return their sum (also a binary string).

For example,
a = "11"
b = "1"
Return "100".


思路:1. 首先我们要理解 二进制是什么意思,网上有很多文章对此进行讲解,这里不再加以详细说明。

2. 我们要想清楚的是, 无论用什么进制, 做加法的时候必然要考虑的事情就是会有进位。据此, 我们要想清楚二进制的进位在咱们代码里如何实现。 下面假设 进上来的量是carry(可能的量是 0 或1 ), 目前在两个string上的 数字分别是 a, b(a , b 所有可能的组合是 10,01,11,00)。那么每次对同一位上的数字进行加法可能的结果是 0, 1, 2, 3. 如果是0,1则 接下来carry 是0, 同时现在的位数 就是相加的结果。 如果是 2,3 则下一位相加时的carry 会变成1, 同时现在的位数 结果应该是目前结果余二。

3. 我们要考虑的是如果两个string 不一边长, 那么最后一个剩余, 我们要把这个考虑到。所以以上了 可以先找出两个string 较大的那个。用小的长度进行for loop, 最后再看大的是否用完。


代码:

java版本:

public class Solution {
    public String addBinary(String a, String b) {
        if(a.length() < b.length()){//  make the longer string a, and short string b
            String tmp = a;
            a = b;
            b = tmp;
            
        }
        String res = "";
        int carry = 0;
        int i, j;
        for(i = a.length() - 1 , j = b.length() - 1; i >= 0 && j >=0; i --, j--){
            int sum = carry + (int)(a.charAt(i) - '0')+ (int)(b.charAt(j) - '0');
            int val = sum % 2;
            carry = sum/2;
            res = val+res;
        }
        while(i >= 0){
            int sum = carry + (a.charAt(i) - '0');
            int val = sum % 2;
            carry = sum/2;
            res = val+res;
            i -- ;
        }
        if(carry == 1)
            res = "1"+res;
        return res;
    }
}

char* addBinary(char* a, char* b) {
    char * tmp, *result;
    int i,j,val, sum, carry = 0, lenA,lenB;
    lenA = strlen(a);
    lenB = strlen(b);
    printf("len of a is %d, len of b is %d\n", lenA, lenB);
    if(lenA < lenB){
        tmp = a;
        a = b;
        b = tmp;
    }
    lenA = strlen(a);
    lenB = strlen(b);
    result = malloc((lenA+1)*sizeof(char));
    result[lenA] = '\0';
    i = lenA -1;
    j = lenB -1;
    while(j >= 0){
        sum = (a[i]- '0') + (b[j]- '0') + carry;
        val = sum%2;
        carry = sum/2;
        result[i] = val +'0';
        j --;
        i --;
    }
    
    while(i >= 0){
        sum = (a[i]- '0')  + carry;
        val = sum%2;
        carry = sum/2;
        result[i] = val +'0';
        i --;
    }
    printf("result is %s\n",result);
    if(carry == 1){
        i = strlen(result);
        tmp = malloc((i+ 2)*sizeof(char));
        tmp [0] = '1';
        tmp[1] = '\0';
        printf("tmp is %s", tmp);
        result = strcat(tmp, result);
    }
    return result;
}
为大家提供一个ruby代码,非常简单:
# @param {String} a
# @param {String} b
# @return {String}
def add_binary(a, b)
    (a.to_i(2) + b.to_i(2)).to_s(2)
end



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值