题目讲解
67. 二进制求和
算法讲解
为了方便计算,我们将两个字符串的长度弄成一样的,在短的字符串前面添加字符0;我们从后往前计算,当遇到当前计算出来的字符是>= '2’的,那么就需要往前面进位和求余
注意:循环遍历字符串的时候,循环的边界不能够是>=0,因为需要向前处理进位,当i ==0的时候,i - 1就越界了,所以等循环完成需要单独判断第一个位置的字符情况,需要进位的就尾插字符串即可
class Solution {
public:string addBinary(string a, string b) {int lena = a.size();int lenb = b.size();//让两个字符串一样长if(lena < lenb){while(lena < lenb){a = '0' + a;lena++;}}else{while(lena > lenb){b = '0' + b;lenb++;}}for(int i = a.size() - 1; i > 0; i--){a[i] = a[i] - '0' + b[i]; //ASCLLif(a[i] >= '2'){//处理进位a[i] = (a[i] - '0') % 2 + '0'; //将计算出来的数字取ASCLLa[i-1] = a[i-1] + 1; //处理进位}}a[0] = a[0] - '0' + b[0];if(a[0] >= '2'){a[0] = (a[0] - '0') % 2 + '0';a = '1' + a;}return a;}
};