浏览 747
扫码
Add Binary
Given two binary strings, return their sum (also a binary string).
For example,
a = “11”
b = “1”
Return “100”.题目翻译: 对于给定的两个二进制数字所表达的字符串,我们求其相加所得到的结果, 根据上例便可得到答案.
题目分析: 我认为这道题所要注意的地方涵盖以下几个方面:
- 对字符串的操作.
- 对于加法,我们应该建立一个进位单位,保存进位数值.
- 我们还要考虑两个字符串如果不同长度会怎样.
- int 类型和char类型的相互转换.
时间复杂度:其实这就是针对两个字符串加起来跑一遍,O(n) n代表长的那串字符串长度.
代码如下:
class Solution {public:string addBinary(string a, string b) {int len1 = a.size();int len2 = b.size();if(len1 == 0)return b;if(len2 == 0)return a;string ret;int carry = 0;int index1 = len1-1;int index2 = len2-1;while(index1 >=0 && index2 >= 0){int num = (a[index1]-'0')+(b[index2]-'0')+carry;carry = num/2;num = num%2;index1--;index2--;ret.insert(ret.begin(),num+'0');}if(index1 < 0&& index2 < 0){if(carry == 1){ret.insert(ret.begin(),carry+'0');return ret;}}while(index1 >= 0){int num = (a[index1]-'0')+carry;carry = num/2;num = num%2;index1--;ret.insert(ret.begin(),num+'0');}while(index2 >= 0){int num = (b[index2]-'0')+carry;carry = num/2;num = num%2;index2--;ret.insert(ret.begin(),num+'0');}if(carry == 1)ret.insert(ret.begin(),carry+'0');return ret;}};