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

The input strings are both non-empty and contains only characters 1or 0.

Example 1:

Input: a = "11", b = "1"
Output: "100"

Example 2:

Input: a = "1010", b = "1011"
Output: "10101"

---------------------------------------------------------------------------------------------------------------------------------------------

这个题说的是将两个以字符串形式的二进制进行二进制加法运算后得到的结果,结果是string形式。

1)

先从最右端遍历,一个一个相加,可以用一个辅助变量来作为要进位的数,如果其中一个已经遍历完,而另一个还没遍历完,再继续遍历这个没有遍历完的字符串(并不是与另一个字符串二进制对应的数相加)。

用stringstream来将一个int类型的数转换为string类型,不过花的时间可能会比较长。

C++代码:

class Solution {
public:
string addBinary(string a, string b) {
int len1 = a.length();
int len2 = b.length();
int i = len1-,j = len2-;
int carry = ; //进位。
string str = "";
while(true){
if(i < || j < ){
break;
}
int num1 = a[i] - '';
int num2 = b[j] - '';
int sum = num1 + num2 + carry;
stringstream ss;
string s;
ss << (sum%);
ss >> s;
str = s + str;
carry = sum / ; //向前进1或进0。
i--;
j--;
}
if(j >= ){
while(j >= ){
int num = b[j] - '';
int sum = num + carry;
stringstream ss;
string s;
ss << (sum%);
ss >> s;
str = s + str;
carry = sum / ;
j--;
}
}
if(i >= ){
while(i >= ){
int num = a[i] - '';
int sum = num + carry;
stringstream ss;
string s;
ss << (sum%);
ss >> s;
str = s + str;
carry = sum / ;
i--;
}
}
if(carry > ){
stringstream ss;
string s;
ss << carry;
ss >> s;
str = s + str;
}
return str;
}
};

2)

也可以直接用char(num + '0'),将一个int类型的数转换为char类型。这样会大大提升速度。

C++代码:

class Solution {
public:
string addBinary(string a, string b) {
int len1 = a.length();
int len2 = b.length();
int i = len1-,j = len2-;
int carry = ;
string str = "";
while(true){
if(i < || j < ){
break;
}
int num1 = a[i] - '';
int num2 = b[j] - '';
int sum = num1 + num2 + carry;
str = char(sum% + '') + str;
carry = sum / ;
i--;
j--;
}
if(j >= ){
while(j >= ){
int num = b[j] - '';
int sum = num + carry;
str = char(sum% + '') + str;
carry = sum / ;
j--;
}
}
if(i >= ){
while(i >= ){
int num = a[i] - '';
int sum = num + carry;
str = char(sum % + '') + str;
carry = sum / ;
i--;
}
}
if(carry > ){
str = char(carry + '') + str;
}
return str;
}
};

3)

还可以吧上面的代码进一步优化,缩短代码行。要熟练地运用三元表达式。

C++代码:

class Solution {
public:
string addBinary(string a, string b) {
int len1 = a.length();
int len2 = b.length();
int carry = ;
string str = "";
for(int i = len1 - ,j = len2 - ;i >= || j >= ;i--,j--){
int num1 = i >= ? a[i] - '' : ;
int num2 = j >= ? b[j] - '' : ;
int sum = num1 + num2 + carry;
str = char(sum % + '') + str;
carry = sum / ;
}
if(carry > ){
str = char(carry + '') + str;
}
return str;
}
};

4)

这个char还可以用to_string()代替,用to_string(num),这个是<string> 内置的。不过运行速度会变慢。。。。

C++代码:

class Solution {
public:
string addBinary(string a, string b) {
int len1 = a.length();
int len2 = b.length();
int carry = ;
string str = "";
for(int i = len1 - ,j = len2 - ;i >= || j >= ;i--,j--){
int num1 = i >= ? a[i] - '' : ;
int num2 = j >= ? b[j] - '' : ;
int sum = num1 + num2 + carry;
str = to_string(sum % ) + str;
carry = sum / ;
}
if(carry > ){
str = to_string(carry) + str;
}
return str;
}
};

(String) leetcode 67. Add Binary的更多相关文章

  1. LeetCode 67. Add Binary (二进制相加)

    Given two binary strings, return their sum (also a binary string). For example,a = "11"b = ...

  2. [LeetCode] 67. Add Binary 二进制数相加

    Given two binary strings, return their sum (also a binary string). The input strings are both non-em ...

  3. LeetCode 67. Add Binary

    Given two binary strings, return their sum (also a binary string). For example,a = "11"b = ...

  4. Java [Leetcode 67]Add Binary

    题目描述: Given two binary strings, return their sum (also a binary string). For example,a = "11&qu ...

  5. [leetcode]67. Add Binary 二进制加法

    Given two binary strings, return their sum (also a binary string). The input strings are both non-em ...

  6. LeetCode - 67. Add Binary(4ms)

    Given two binary strings, return their sum (also a binary string). The input strings are both non-em ...

  7. leetcode 67. Add Binary (高精度加法)

    Given two binary strings, return their sum (also a binary string). For example,a = "11"b = ...

  8. LeetCode 67 Add Binary(二进制相加)(*)

    翻译 给定两个二进制字符串,返回它们的和(也是二进制字符串). 比如, a = "11" b = "1" 返回 "100". 原文 Give ...

  9. leetCode 67.Add Binary (二进制加法) 解题思路和方法

    Given two binary strings, return their sum (also a binary string). For example, a = "11" b ...

随机推荐

  1. 微信小程序 canvas 绘制圆形状

    page({ // 绘制canvas drawCanvas:function(){ const ctx = wx.createCanvasContext('poster') // 画圆形二维码 thi ...

  2. SAP MM ME29N 试图取消审批报错 - Document has already been outputed(function not possible) -

    SAP MM ME29N 试图取消审批报错 - Document has already been outputed(function not possible) - 今天收到用户的一个问题,说他试图 ...

  3. 如何做好SQLite 使用质量检测,让事故消灭在摇篮里

    本文由云+社区发表 SQLite 在移动端开发中广泛使用,其使用质量直接影响到产品的体验. 常见的 SQLite 质量监控一般都是依赖上线后反馈的机制,比如耗时监控或者用户反馈.这种方式问题是: 事后 ...

  4. 本地Windows环境Dubbo搭建测试

    Dubbo介绍 Dubbo[]是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案. 其核心部分包含: 远程通讯: 提供对多种基于长连接的NIO框架抽象封装, ...

  5. maven pom 属性介绍

    maven pom属性 内置属性(预定义,可直接使用) ${basedir} 表示项目根目录,即包含pom.xml文件的目录; ${version} 表示项目版本; ${project.basedir ...

  6. 一个简易的kmp教学并给出java实现

    简单介绍一下问题 给定source字符串,找出target字符串出现的首位 例如 source   为“abddabddabc” target 为 “abddabc” 从第一位开始比较 |a b d ...

  7. fullcalendar日历插件的使用并动态增删改查

    我上个项目是做了一个关于教育方面的web端页面,其中的课程表就要用到fullcalendar日历插件,刚开始也是不会用,因为以前也没用过,后面也是看官方文档,问同事,最后完成了这个课程表,个人感觉fu ...

  8. pycharm 远程调试代码

    我们在本地开发的时候,有时候需要使用到远程服务器的环境,如我们在调试微信或支付宝支付的时候. 那我们如何通过本地pycharm环境连接远程服务器进行调试呢? 1.pycharm和远程服务器连接 1)点 ...

  9. C#,WPF中使用多文本显示数据,并对其数据进行关键字高亮等操作

    需求:针对多文本信息显示,我们需要对其内容中的某些关键字或者某行进行高亮显示,并用不同颜色显示. 分析:在C#中,首先要进行多文本信息显示,可以RichTextBox(不要使用TextBox)控件,该 ...

  10. Excel阅读模式/单元格行列指示/聚光灯开发 技术要点再分享

    1. 引言 文题中所谓技术要点再分享,本意是想在大神Charltsing Liu的博文“简单介绍Excel单元格行列指示的实现原理(俗称聚光灯功能)”的基础上写一点个人开发体会.写本文的初衷有三点,一 ...