【LeetCode】Add Binary

xiaoxiao2021-02-27  232

题目:

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

转载请注明原文地址: https://www.6miu.com/read-11083.html

最新回复(0)