1. 题目来源

链接:二进制求和
来源:LeetCode

2. 题目说明

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

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

示例1:

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

示例2:

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

3. 题目解析

思路分析

二进制求和,满二进一

  1. 首先让两个字符串等长,若不等长,在短的字符串前补零,否则之后的操作会超出索引。
  2. 然后从后到前遍历所有的位数,同位相加,这里有一个点,用的是字符相加,利用 ASCII 码,字符在内部都用数字表示,我们不需要知道具体数值,但可知 ‘0’-‘0’ = ‘0’, ‘0’+1=‘1’,以此类推 。字符的加减,大小比较,实际上都是内部数字的加减,大小比较。
  3. 判断相加后的字符,若大于等于字符 ‘2’,下一位需要进一
  4. 第 0 位数的相加在这里是单独处理的,因为它可能涉及到字符的插入,即是否需要在最前面加一位数 ‘1’。

4. 代码展示

class Solution {public:string addBinary(string a, string b) {int al = a.size();int bl = b.size();while(al < bl) {    //让两个字符串等长,若不等长,在短的字符串前补零,否则之后的操作会超出索引a = '0' + a;++ al;}while(al > bl) {b = '0' + b;++ bl;}for(int j = a.size() - 1; j > 0; -- j) {   //从后到前遍历所有的位数,同位相加a[j] = a[j] - '0' + b[j];if(a[j] >=  '2') {    //若大于等于字符‘2’,需要进一a[j] = (a[j] - '0') % 2 + '0';a[j-1] = a[j-1] + 1;}}a[0] = a[0] - '0' + b[0]; //将ab的第0位相加if(a[0] >= '2') {   //若大于等于2,需要进一a[0] = (a[0] - '0') % 2 + '0';a = '1' + a;}return a;}
};

第一遍的笨笨写法:

class Solution {public:string addBinary(string a, string b) {int alen = a.length();int blen = b.length();int length = 0;int cnt = 0;int cnt1 = 0;int flag = 0;if (alen > blen) {cnt = alen - blen;cnt1 = cnt;flag = 1;while (cnt) {b.push_back('0');--cnt;}}if (alen < blen) {cnt = blen - alen;cnt1 = cnt;flag = 2;while (cnt) {a.push_back('0');--cnt;}}if (alen == blen) flag = 3;if (flag == 1) {length = alen;}if (flag == 2 || flag == 3) {length = blen;}vector<int> vta(length, 0);vector<int> vtb(length, 0);vector<int> vt(length, 0);int flag2 = 0;for (int i = 0; i < vta.size(); ++i) {vta[i] = a[i] - '0';}for (int i = 0; i < vtb.size(); ++i) {vtb[i] = b[i] - '0';}if (flag == 1) {for (int i = vtb.size() - 1; i >= cnt1; --i) {vtb[i] = vtb[i - cnt1];}for (int i = 0; i < cnt1; ++i) {vtb[i] = 0;}}if (flag == 2) {for (int i = vta.size() - 1; i >= cnt1; --i) {vta[i] = vta[i - cnt1];}for (int i = 0; i < cnt1; ++i) {vta[i] = 0;}}for (int i = 0; i < vt.size(); ++i) {vt[i] = vta[i] + vtb[i];}reverse(vt.begin(), vt.end());vt.push_back(0);for (int i = 0; i < vt.size(); ++i) {if (vt[i] == 2) {vt[i] = 0;vt[i + 1] += 1;}if (vt[i] == 3) {vt[i] = 1;vt[i + 1] += 1;}}if (vt[vt.size() - 1] == 0) vt.pop_back();reverse(vt.begin(), vt.end());string str(vt.size(), '0');for (int i = 0; i < vt.size(); ++i) {if (vt[i] == 0) str[i] = '0';else str[i] = '1';}return str;}
};

没有精简代码,顺了一遍思路直接开码…整了这么多变量…

[每日一题] 106. 二进制求和(字符串、数学)相关推荐

  1. LeetCode每日一题——1684. 统计一致字符串的数目

    LeetCode每日一题系列 题目:1684. 统计一致字符串的数目 难度:简单 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 给你一个由不同字符组成的字符串 allowed ...

  2. 【Python】青少年蓝桥杯_每日一题_12.03_输出字符串的长度

    用心写好每一篇文章 一.题目背景 本题是Python编程问题,出现在2020年9月的STEMA考试中. 二.编程实现 输入一个字符串(N),输出该字符串的长度. 输入描述:输入一个字符串N 输出描述: ...

  3. 【Python】青少年蓝桥杯_每日一题_1.03_输出字符串

    用心写好每一篇文章 一.编程实现 输入一个字符串,然后将这个字符串输出. 输入描述:输入一个字符串 输出描述:输出这个字符串 样例输入: abc 样例输出: abc 二.评分标准 6分:能正确输出一组 ...

  4. LeetCode 题 - 67. 二进制求和 python实现

    题目 给定两个二进制字符串,返回他们的和(用二进制表示). 输入为非空字符串且只包含数字 1 和 0. 示例 1: 输入: a = "11", b = "1" ...

  5. 学渣的刷题之旅 leetcode刷题 67.二进制求和

    给定两个二进制字符串,返回他们的和(用二进制表示). 输入为非空字符串且只包含数字 1 和 0. 输入: a = "11", b = "1" 输出: " ...

  6. LeetCode 每日一题——1684. 统计一致字符串的数目

    1.题目描述 1684. 统计一致字符串的数目 给你一个由不同字符组成的字符串 allowed 和一个字符串数组 words .如果一个字符串的每一个字符都在 allowed 中,就称这个字符串是 一 ...

  7. 每日一题(40)—— 字符串常量

    下列代码有什么问题? char* s="AAA"; printf("%s",s); s[0]='B'; printf("%s",s); &q ...

  8. 【Java每日一题,Map和字符串】Ananagrams

    Introduction 输入一些单词,找出所有满足如下条件的单词:该单词不能通过字母重排,得到输入文本的另外一个单词.在判断是否满足条件时,字母不分大小写,但在输出时应保留输入的大小写,按字典序排列 ...

  9. 【每日一题】旋变字符串

    " 一个字符串可以分解成多种二叉树结构.如果 str 长度为 1 ,认为不可分解.如果 str 长度为 N(N > 1),左部分长度可 以为 1 ~ N - 1,剩下的为右部分的长度. ...

最新文章

  1. fft 相位谱_信号处理之功率谱原理与python实现
  2. ZooKeeper Watch Java API浅析getChildren
  3. linux 定时清理tomcat日志
  4. php异常处理示例,php异常处理示例
  5. linux(3):Linux MBR分区、挂载操作步骤,逻辑卷扩容操作
  6. Python——正则表达式特殊符号及用法
  7. SAP License:SAP S/4HANA Cloud [ERP 云]
  8. Java学习目录(持续更新中)
  9. Ubuntu 10.04的安装
  10. 100部超级好电影,100组优秀的字体设计(不看后悔系列)
  11. LeaRun低代码开发平台 助推物联网应用快速落地
  12. R语言中的if-else语句写法
  13. 弹出USB大容量存储设备时出问题的解决方案
  14. /Users/apple/.zshrc:2: command not found: i 终端报错解决方法
  15. 英文论文写作注意事项整理
  16. 博士毕业论文英文参考文献换行_如何赏心悦目的翻译英文文献全文
  17. js学到什么程度学框架_如何学到什么
  18. pytorch的expand_as和expand
  19. 《程序员》特别策划:论托普的“倒掉”
  20. im2bw函数的用法

热门文章

  1. 医学图像分割之TransUNet
  2. 日常学习记录——目前学习记录总结
  3. Android10.0修改默认usb为MTP模式
  4. 2021最新css3面试题理论,前端css面试题,移动端面试题理论。
  5. 计算机考试重点题目与答案
  6. pid巡线算法程序_技术分享——从单个到多个颜色传感器巡线原理解析
  7. 浮点型数据规范以及规格化与非规格化数据(更新:原文疑问已解)
  8. 【龙芯1c库】封装硬件pwm接口和使用示例
  9. Preprocessor Macros添加无效
  10. mysql 值很少的索引_关于 Mysql 字段值分布很少的字段要不要加索引的问题.