给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1 和 0。
示例 1:
输入: a = “11”, b = “1”
输出: “100”
示例 2:
输入: a = “1010”, b = “1011”
输出: “10101”
从后往前遍历两个给出的二进制字符串,对应位做二进制加法,然后依次将相加的结果添加到result中即可。
但是这个里面有个问题,就是两个二进制串的长度不一定相同,如果要对长度进行判断和处理的话,代码量显然太多。所以可以采取这样一种方法,如果说其中一个二进制字符串已经遍历完,我们再往下遍历时,就把这个二进制字符串的位看做0(其实已经没有了,但是看做0不会影响),相当于本来是11 + 1,现在变成了11 + 01,结果是不受影响的,但是写循环的时候则节省了代码量。
特别要注意的是:C# 在处理 字符值是这样的情况 ‘1’=49 是转成49进行计算
carry 进位的值,0表示不进位(进位0),1表示进位1
using System;
using System.Text;
namespace letcode_67.AddBinary
{
class Program
{
static void Main(string[] args)
{
string a = "11";
string b = "1";
string c= AddBinary(a,b);
Console.WriteLine(c);
Console.ReadKey();
}
static string AddBinary(string a, string b)
{
int i = a.Length - 1, j = b.Length - 1;
int carry = 0;
string result = "";
while (i >= 0 || j >= 0)
{
int t1 = i >= 0 ? a[i]-'0' : 0;
int t2 = j >= 0 ? b[j]-'0' : 0;
int temp = t1 + t2 + carry;
result= temp % 2+result;
carry = temp / 2;
i--;
j--;
}
if (carry == 1)
{
result = "1" + result;
}
return result;
}
}