(String) leetcode 67. Add Binary
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的更多相关文章
- LeetCode 67. Add Binary (二进制相加)
Given two binary strings, return their sum (also a binary string). For example,a = "11"b = ...
- [LeetCode] 67. Add Binary 二进制数相加
Given two binary strings, return their sum (also a binary string). The input strings are both non-em ...
- LeetCode 67. Add Binary
Given two binary strings, return their sum (also a binary string). For example,a = "11"b = ...
- Java [Leetcode 67]Add Binary
题目描述: Given two binary strings, return their sum (also a binary string). For example,a = "11&qu ...
- [leetcode]67. Add Binary 二进制加法
Given two binary strings, return their sum (also a binary string). The input strings are both non-em ...
- LeetCode - 67. Add Binary(4ms)
Given two binary strings, return their sum (also a binary string). The input strings are both non-em ...
- leetcode 67. Add Binary (高精度加法)
Given two binary strings, return their sum (also a binary string). For example,a = "11"b = ...
- LeetCode 67 Add Binary(二进制相加)(*)
翻译 给定两个二进制字符串,返回它们的和(也是二进制字符串). 比如, a = "11" b = "1" 返回 "100". 原文 Give ...
- leetCode 67.Add Binary (二进制加法) 解题思路和方法
Given two binary strings, return their sum (also a binary string). For example, a = "11" b ...
随机推荐
- JS 的继承
1:原生链:prototype 儿子能够继承父亲的属性,也可以觉得遗传基因不好自己改属性,(但是不能改变老爸的属性). 看例子: function farther(){ ...
- C# 中一些类关系的判定方法
1. IsAssignableFrom实例方法 判断一个类或者接口是否继承自另一个指定的类或者接口. public interface IAnimal { } public interface ID ...
- 【设计模式】适配器模式 Adapter Pattern
适配器模式在软件开发界使用及其广泛,在工业界,现实中也是屡见不鲜.比如手机充电器,笔记本充电器,广播接收器,电视接收器等等.都是适配器. 适配器主要作用是让本来不兼容的两个事物兼容和谐的一起工作.比如 ...
- 工具资源系列之给虚拟机装个windows
前面我们介绍了如何在 mac 宿主机安装 VMware 虚拟机软件,本节我们将继续介绍如何给虚拟机安装镜像,切换不同的操作系统. VMware 软件是容器,镜像是内核,这里的镜像指的是操作系统. 下载 ...
- 如何从GitHub下载csv文件
当打开存.csv文件的页面时,不用直接点击页面的Download,这样会使csv文件直接用浏览器打开. 要点击Raw按钮,鼠标右键,文件另存为,可以直接把csv文件下载到本地.
- Scala操作Hbase空指针异常java.lang.NullPointerException处理
Hbase版本:Hortonworks Hbase 1.1.2 问题描述:使用Scala操作Hbase时,发生空指针异常(java.lang.RuntimeException: java.lang.N ...
- windows 10隐藏各种文件夹
1.windows键+R打开运行,或者Ctrl+Alt+Del键调出任务管理器--文件--运行新的任务,然后出入"regedit"打开注册表: 2.按目录找到:[-HKEY_CLA ...
- 编译装php7.2 && nginx-1.14
环境准备 # cat /etc/centos-release CentOS Linux release 7.6.1810 (Core) # uname -r 3.10.0-957.el7.x86_64 ...
- 关于当前Web前端技术的一些感悟和笔记
最近这些年,随着前端应用技术突飞猛进,产生了很多新的前端框架,当然也引入了数不胜数的前端技术概念,前端不在是早期Web Form的拖拉处理方式,也不再是Ajax+HTML那么简单,随着前端技术的发展, ...
- Java导出压缩包工具类
/** * @Title: exportZip * @Description:TODO(导出建压缩文件) * @param delAdviceinfo 为项目实体类 * @date 2018年4月4日 ...