67. Add Binary

https://segmentfault.com/a/1190000003707317

public class Solution {
    public string addBinary(string a, string b)
    {
        int i = a.Length - 1, j = b.Length - 1, carry = 0;
        StringBuilder sb = new StringBuilder();
        while (i >= 0 || j >= 0)
        {
            int m = i >= 0 ? a[i] - '0' : 0;
            int n = j >= 0 ? b[j] - '0' : 0;
            int sum = m + n + carry;
            carry = sum / 2;
            sb.Insert(0, (sum % 2).ToString());
            i--;
            j--;
        }
        if (carry != 0) sb.Insert(0, '1');
        return sb.ToString();
    }
}
carry相当于进位,字符串长度减1,是为了让a[i]默认为最低位,sum是两数相加的总值,

sum超过2则进位为1,即为carry的新值。而sum%2的值即为进位之后原位剩下的值。


当自减过后,如果一方字符串过短,则相当于在高位填0,重复步骤。


如果最后,carry为1,说明最高位还是要进位,需要再多一位数。Insert(0,1)相当于每次在索引为0处插入原位剩下的值。

你可能感兴趣的:(C#,LeetCode)