LeetCode 67.二进制求和
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1 和 0。
示例 1:
输入: a = “11”, b = “1”
输出: “100”
示例 2:
输入: a = “1010”, b = “1011”
输出: “10101”
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-binary
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
将两个字符串补到等长,然后从后往前对位相加,满二进一。第一位单独考虑。
class Solution {
public:
string addBinary(string a, string b) {
if(a=="0")return b;
if(b=="0")return a;
if(a.length()<b.length())
{
string c=b;
b=a;
a=c;
}
int x=a.length();
int y=b.length();
if(x!=y){
for(int i=0;i<x-y;i++)
{
b='0'+b;
}
}
for(int i=x-1;i>=0;i--)
{
a[i]=a[i]+b[i]-'0';
if(i==0&&a[0]>'1')
{
a[0]-=2;
a='1'+a;
return a;
}
else if(a[i]>'1')
{
a[i]-=2;
a[i-1]++;
}
}
return a;
}
};
时间复杂度O(n)
1.使用过转化成十进制相加再转换成二进制,发现内存溢出。
2如果字符串a或b为“0”可以直接输出另一个。
3.因为需要对较短的字符串进行补位,导致length()值会变化。所以需要先用一个变量存放length()值。
ps:解决了之前的困惑,无法改变字符串的length()值。但是只知道可以使用字符串+另一个字符串来增加length()值,不知道能不能减少?