[E模拟] lc67. 二进制求和(模拟+高精度)

1. 题目来源

链接:67. 二进制求和

2. 题目解析

前导题:

就是高精度加法。模板题。在此针对 t 进位的处理很巧妙,因为 t 最后进位一定是 1,且进位的数也是 1,这个写法很巧妙!其中高精度乘法也是这个思想和做法!

  • 时间复杂度 O ( n ) O(n) O(n)
  • 空间复杂度 O ( 1 ) O(1) O(1)

代码:

class Solution {
    
    
public:
    string addBinary(string a, string b) {
    
    
        reverse(a.begin(), a.end());
        reverse(b.begin(), b.end());

        string res;
        for (int i = 0, t = 0; i < a.size() || i < b.size() || t; i ++ ) {
    
    
            if (i < a.size()) t += a[i] - '0';
            if (i < b.size()) t += b[i] - '0';
            res += to_string(t % 2);            // 在此最后有进位,则 t 一定为 1,统一了特殊情况
            t /= 2;
        }
        reverse(res.begin(), res.end());

        return res;
    }
};

猜你喜欢

转载自blog.csdn.net/yl_puyu/article/details/111873641
今日推荐