LeetCode:67.二进制求和

67. 二进制求和 - 力扣(LeetCode)

又是一道求和题,% / 在求和的用途了解了些,

目录

题目:

思路分析: 

博主代码:

官方代码: 

每日表情包:


题目:

思路分析: 

求和,就对齐单个字符式的求和以及转换成整型求和,当然转换成整型有溢出的烦恼。

遍历即可,不过得注意自己malloc的字符串要记得加上一个字符串的结束标志'\0'

既然是遍历就是时O(n)又因为是自己malloc返回,所以空O(n),

博主代码:

char AddCheck01(char ch1, char ch2, char flag)
{
    if (((ch1 + ch2 + flag) - 3 * '0') >= 2) return '1';
    else return '0';
}
char* addBinary(char* a, char* b) {
    //要想相加,对齐末位很有必要,所以先求长度
    //官解的reserve是变相的对齐相加
    int sizeA = strlen(a);
    int sizeB = strlen(b);
    char flag = '0';
    int size = (sizeA > sizeB ? sizeA : sizeB);
    char* Return = (char*)malloc(sizeof(char) * (size + 1));
    Return[size] = '\0';//很容易忘记的字符串要带的结束标志
    for (int i = 1; i <= size; ++i) {
        char Acur = (sizeA - i) >= 0 ? a[sizeA - i] : '0';
        char Bcur = (sizeB - i) >= 0 ? b[sizeB - i] : '0';
        Return[size - i] = Acur ^ Bcur ^ flag;
        flag = AddCheck01(Acur, Bcur, flag);
        //%,/,的相加看起来要好多了(之前的十进制链表的题用过)
    }
    if (flag == '1') {//可能的进一位情况
        char* tmp = (char*)malloc(sizeof(char) * (size + 2));
        memmove((tmp + 1), Return, sizeof(char) * (size + 1));
        tmp[0] = '1';
        free(Return);
        Return = tmp;
    }
    return Return;
}

官方代码: 

不喜欢这种malloc方式,在不进一位的情况下,相当于多开辟了空间,

void reserve(char* s) {
    int len = strlen(s);
    for (int i = 0; i < len / 2; i++) {
        char t = s[i];
        s[i] = s[len - i - 1], s[len - i - 1] = t;
    }
}

char* addBinary(char* a, char* b) {
    reserve(a);
    reserve(b);

    int len_a = strlen(a), len_b = strlen(b);
    int n = fmax(len_a, len_b), carry = 0, len = 0;
    char* ans = (char*)malloc(sizeof(char) * (n + 2));
    for (int i = 0; i < n; ++i) {
        carry += i < len_a ? (a[i] == '1') : 0;
        carry += i < len_b ? (b[i] == '1') : 0;
        ans[len++] = carry % 2 + '0';
        carry /= 2;
    }

    if (carry) {
        ans[len++] = '1';
    }
    ans[len] = '\0';
    reserve(ans);

    return ans;
}

作者:力扣官方题解
链接:https://leetcode.cn/problems/add-binary/solutions/299667/er-jin-zhi-qiu-he-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

每日表情包:

相关推荐

  1. leetcode67二进制求和

    2024-02-13 22:40:01       6 阅读
  2. leetcode67 二进制求和

    2024-02-13 22:40:01       9 阅读
  3. 二进制求和算法(leetcode67题)

    2024-02-13 22:40:01       38 阅读
  4. 【技巧】Leetcode 67. 二进制求和【简单】

    2024-02-13 22:40:01       7 阅读
  5. 【C】67 二进制求和

    2024-02-13 22:40:01       14 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-13 22:40:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-13 22:40:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-13 22:40:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-13 22:40:01       18 阅读

热门阅读

  1. 一篇文章学透所有Python知识

    2024-02-13 22:40:01       32 阅读
  2. Python列表中的clear功能及用法举例

    2024-02-13 22:40:01       34 阅读
  3. 突破编程_C++_面试(基础知识(13))

    2024-02-13 22:40:01       26 阅读
  4. 读书笔记:《人件:PeopleWare》

    2024-02-13 22:40:01       32 阅读
  5. 阿里云Redis

    2024-02-13 22:40:01       29 阅读
  6. C语言:函数

    2024-02-13 22:40:01       29 阅读
  7. Dev-c++跑酷小游戏 1.0.0

    2024-02-13 22:40:01       27 阅读
  8. KY141 最大连续子序列

    2024-02-13 22:40:01       36 阅读