【力扣】67. 二进制求和

简介: 【力扣】67. 二进制求和

题目描述

给你两个二进制字符串 ab ,以二进制字符串的形式返回它们的和。

示例 1:

输入:a = “11”, b = “1”

输出:“100”

示例 2:

输入:a = “1010”, b = “1011”

输出:“10101”

提示:

  • 1 <= a.length, b.length <= 104
  • a 和 b 仅由字符 ‘0’ 或 ‘1’ 组成
  • 字符串如果不是 “0” ,就不含前导零


解题方法

  • C
void reserve(char* str)   // 翻转字符串
{
    int len = strlen(str);
    for (int i = 0; i < len / 2; i++)
    {
        char temp = str[i];
        str[i] = str[len - i - 1];
        str[len - i - 1] = temp;
    }
}

char* addBinary(char* a, char* b)
{
    int len_a = strlen(a), len_b = strlen(b);   // 获取字符串长度
    int max = fmax(len_a, len_b);               // 获取最大长度
    char* ans = (char*)malloc(sizeof(char) * (max + 2));  // 申请内存,包含进位和'\0'
    int carry = 0, len = 0;

    reserve(a);         // 翻转字符串
    reserve(b);

    for (int i = 0; i < max; ++i)
    {
        if(i < len_a)
        {
            if(a[i] == '1')
            {
                carry += 1;
            }
            else
            {
                carry += 0;
            }
        }

        if(i < len_b)
        {
            if(b[i] == '1')
            {
                carry += 1;
            }
            else
            {
                carry += 0;
            }
        }

        ans[len++] = carry % 2 + '0';   // 计算当前位
        carry /= 2;                     // 计算进位
    }

    if (carry)              // 判断是否还有进位
    {
        ans[len++] = '1';   // 进位
    }

    ans[len] = '\0';        // 末尾加'\0'

    reserve(ans);           // 字符串翻转

    return ans;
}



相关文章
|
1月前
|
Java 编译器
LeetCode 190. 颠倒二进制位
LeetCode 190. 颠倒二进制位
24 0
|
8月前
【Leetcode -696.计数二进制字串 -697.数组的度】
【Leetcode -696.计数二进制字串 -697.数组的度】
22 0
【LeetCode-每日一题】-67. 二进制求和
【LeetCode-每日一题】-67. 二进制求和
|
18天前
|
存储 SQL 算法
LeetCode题目67:二进制求和
LeetCode题目67:二进制求和
|
22天前
|
算法 Java Go
【经典算法】LeetCode 67. 二进制求和(Java/C/Python3/Golang实现含注释说明,Easy)
【经典算法】LeetCode 67. 二进制求和(Java/C/Python3/Golang实现含注释说明,Easy)
9 2
|
15天前
|
算法
【经典LeetCode算法题目专栏分类】【第4期】BFS广度优先算法:单词接龙、最小基因变化、二进制矩阵中的最短路径
【经典LeetCode算法题目专栏分类】【第4期】BFS广度优先算法:单词接龙、最小基因变化、二进制矩阵中的最短路径
|
8月前
【Leetcode -748.最短补全词 -762.二进制表示中质数个计算置位】
【Leetcode -748.最短补全词 -762.二进制表示中质数个计算置位】
29 0
|
1月前
LeetCode[题解] 2864. 最大二进制奇数
LeetCode[题解] 2864. 最大二进制奇数
16 0
|
1月前
leetcode:190. 颠倒二进制位
leetcode:190. 颠倒二进制位
16 0
|
1月前
leetcode-1784:检查二进制字符串字段
leetcode-1784:检查二进制字符串字段
21 0