描述

Given two binary strings, return their sum (also a binary string).

For example,

a = "11"

b = "1"

Return "100".

分析

这道题没做出来。。

逛了评论区才写出来的,代码写得很简洁

https://discuss.leetcode.com/topic/8981/short-code-by-c

我之前的思路是对两个string的每一位都做处理,比如,如果两个都是1,carry就为1,tmp(当前位的值)就为0;如果只有一个1,carry就为0,tmp为1;如果全为0,carry和tmp就都为0.

然后发现来自低位的进位要先初始化一次,于是就对最低位单独处理,得到carry的初始值。这样写的话太麻烦了,于是转而求助讨论区。

我参照的代码只用一个变量carry来同时处理进位和当前位。由于string只包含0和1,因此每次都将两个string的当前位变为整型加到carry变量。

比较有趣的地方是while循环的第三个条件,这个条件只有在两个string都遍历结束时才会用到(也就是判断最高位是否有进位),如果有进位,那么carry的值是为1,条件成立,直接把这个1加到最后。

由于整个操作都是直接往待返回的string的末尾加,因此要调用reverse函数逆置。

代码如下:

class Solution {
public:
string addBinary(string a, string b) {
string ret;
int i = a.size() - 1;
int j = b.size() - 1;
int carry = 0;
while(i >= 0 || j >= 0
|| carry > 0){ //仅用来处理最高位有进位的情况
if(i >= 0){
carry += a[i] - '0';
--i;
}
if(j >= 0){
carry += b[j] - '0';
--j;
}
ret += (carry % 2) + '0';
carry /= 2;
}
reverse(ret.begin(),ret.end());
return ret;
}
};

最新文章

  1. load和initialize方法
  2. navicat linux 破解
  3. CacheManagerUtils.java
  4. Javascript 异步加载详解(转)
  5. Openstack的error僵尸实例的解决办法
  6. 合并js文件minify实例
  7. openvpn 连接无法上网
  8. [原创] linux 下上传 datapoint数据到yeelink 【golang版本】
  9. 读书笔记—CLR via C#线程27章节
  10. Css清除浮动最优方式之一
  11. 浅谈如何使用swfupload工具与struts2无缝相接
  12. 【IntelliJ IDEA】使用idea解决新建jsp文件而找不到jsp文件模版的新建选项
  13. Maven常识
  14. docker仓库harbor搭建
  15. WebSocket 理论知识整理
  16. 重新设计导出API
  17. 【转载】基于webpack构建react项目
  18. 迭代函数:zip、enumerate,list解析
  19. eQTL | Expression quantitative trait loci | 数量性状位点 | 表达数量性状基因座
  20. 【git学习笔记】

热门文章

  1. 获取SpringMVC中所有RequestMapping映射URL信息
  2. How to read request body in a asp.net core webapi controller?
  3. ADO.NET 二(Connection)
  4. Linux 下 maven 的下载、上传与安装
  5. 【洛谷 P4302】 [SCOI2003]字符串折叠(DP)
  6. title 有背景边框自适应 mobile
  7. Android目前流行三方数据库ORM分析及对比
  8. D3.js画思维导图(转)
  9. Qt5安装及组件选择(Qt 5.12.0)
  10. SSH安全协议