每日一练(39):二进制求和

简介: 给你两个二进制字符串,返回它们的和(用二进制表示)

给你两个二进制字符串,返回它们的和(用二进制表示)。


输入为 非空 字符串且只包含数字 1 和 0。


示例 1:


输入: a = "11", b = "1"

输出: "100"


示例 2:


输入: a = "1010", b = "1011"

输出: "10101"


提示:


每个字符串仅由字符 '0' 或 '1' 组成。


1 <= a.length, b.length <= 10^4


字符串如果不是 "0" ,就都不含前导零。


来源:力扣(LeetCode)


链接:https://leetcode-cn.com/probl...


方法一:模拟运算


思路分析


模拟直接计算,就是按照类似10进制计算方式,考虑进位


string addBinary(string a, string b) {
    //  先倒序
    reverse(a.begin(), a.end());
    reverse(b.begin(), b.end());
    int na = a.size();
    int nb = b.size();
    int n = max(na, nb);
    string res = "";
    int curr = 0;
    for (int i = 0; i < n; ++i)
    {
        curr += i < na ? a[i] == '1' : 0;
        curr += i < nb ? b[i] == '1' : 0;
        res.push_back(curr % 2 ? '1' : '0');
        curr /= 2;
    }
    if (curr)
    {
        res.push_back('1');
    }
    reverse(res.begin(), res.end());
    return res;
}


方法二:模拟运算优化(LeetCode英文网站大佬写法)


思路分析


模拟直接计算,就是按照类似10进制计算方式,考虑进位


string addBinary(string a, string b) {
    string s;
    s.reserve(a.size() + b.size());
    int c = 0, i = a.size() - 1, j = b.size() - 1;
    while(i >= 0 || j >= 0 || c == 1)
    {
        c += i >= 0 ? a[i--] - '0' : 0;
        c += j >= 0 ? b[j--] - '0' : 0;
        s.push_back((c & 1) + '0');
        c >>= 1;
    }
    reverse(s.begin(), s.end());
    return s;
}


目录
相关文章
|
6月前
|
算法 Java C++
试题 算法训练 6-2递归求二进制表示位数
试题 算法训练 6-2递归求二进制表示位数
46 0
【LeetCode-每日一题】-67. 二进制求和
【LeetCode-每日一题】-67. 二进制求和
|
3月前
|
算法 Java
LeetCode第67题二进制求和
这篇文章是关于LeetCode第67题二进制求和的解题思路和代码实现的分享。作者通过分析题目要求和二进制加法的规则,提供了一个Java语言的解决方案,并在最后总结了二进制在算法中的重要性。
LeetCode第67题二进制求和
|
6月前
|
C语言
【汇编语言实战】输入2个整数求最大公约数
【汇编语言实战】输入2个整数求最大公约数
47 0
|
6月前
|
Python Go 算法
Golang每日一练(leetDay0023) 二进制求和、文本左右对齐、x的平方根
Golang每日一练(leetDay0023) 二进制求和、文本左右对齐、x的平方根
55 0
Golang每日一练(leetDay0023) 二进制求和、文本左右对齐、x的平方根
|
6月前
|
Java Go C++
Rust每日一练(leetDay0023) 二进制求和、左右对齐、平方根
Rust每日一练(leetDay0023) 二进制求和、左右对齐、平方根
67 0
Rust每日一练(leetDay0023) 二进制求和、左右对齐、平方根
|
6月前
|
Python Java Go
Python每日一练(20230409) 字符串拆分数值求和、快乐数、格雷编码
Python每日一练(20230409) 字符串拆分数值求和、快乐数、格雷编码
74 0
Python每日一练(20230409) 字符串拆分数值求和、快乐数、格雷编码
|
6月前
|
Go Python Java
Python每日一练(20230408) 两数相除、分割回文串、x 的平方根
Python每日一练(20230408) 两数相除、分割回文串、x 的平方根
59 0
Python每日一练(20230408) 两数相除、分割回文串、x 的平方根
|
6月前
leetcode-67:二进制求和
leetcode-67:二进制求和
41 0
leetcode:67. 二进制求和
函数原型: char * addBinary(char * a, char * b)
47 0