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. 如何在Android studio上运行从github上下载的RN项目

    想要编译别人的RN项目,还是要踩踩坑才能走上正轨啊,分享下我试过多种方法后最喜欢的方法(其实是因为我多次用VS Code编译都是以失败而告终,所以才选择的studio) 注意:这一步是你的开发环境都安 ...

  2. 【抱怨文】vscode对多项目支持不够友好

    vscode是一个简单的开发工具,启动快,速度快.但是当前1.26版本对多项目支持好像有点问题.命令行有个dotnet sln,但是只能添加新项目,却没有创建解决方案的命令.如果强行添加他会提示没有解 ...

  3. 从0开始的Python学习018更多的Python内容

    特殊的方法 之前学习的都是一些常用的方法,为了使我们的学习更加的完整,我们在这里学习一些特殊的方法. 一般说来,特殊的方法都被用来模仿某个行为.例如,如果你想要为你的类使用x[key]这样的索引操作( ...

  4. delphi中WMI的使用(网卡是否接入)

    WMI(Windows Management Instrumentation,Windows 管理规范)是一项核心的 Windows 管理技术:用户可以使用 WMI 管理本地和远程计算机. 通过使用W ...

  5. 内存与IO的交换【转】

    用户进程的内存页分为两种: file-backed pages(文件背景页) anonymous pages(匿名页) 比如进程的代码段.映射的文件都是file-backed,而进程的堆.栈都是不与文 ...

  6. Windows7安装 docker-compose的过程

    Docker在Windows7系统上安装成功后[详情见Windows7下docker的安装以及遇到的问题],要用到docker-compose相关命令,而docker-compose相关命令在dock ...

  7. goodbye 2018, hello 2019

    纵使不愿意,终究还是到了岁末. 2018 ​ 即将过去的一年,已经完成的事情自己做得不足.年初计划要做的几件事情都做了,感觉没有尽力去做好. 工作 ​ 16年毕业之后到今年,算是真正意义上完成从学生时 ...

  8. Docker 容器安装及常用基础命令

    为什么用docker 作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势. Docker 在如下几个方面具有较大的优势: 更快速的交付和部署 Docker在整个开发周期都可以 ...

  9. Luogu4655 [CEOI2017]Building Bridges

    Luogu4655 [CEOI2017]Building Bridges 有 \(n\) 根柱子依次排列,每根柱子都有一个高度.第 \(i\) 根柱子的高度为 \(h_i\) . 现在想要建造若干座桥 ...

  10. 关于 insufficient memory case 4 的解决记录

    用户在上传图片的时候,系统会报异常 insufficient memory case 4,追踪代码发生在jdk中 image.io 的 read() 方法.这是一个耽搁了很久的bug,客户反馈了好几次 ...