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. Spring注解IOC/DI(4)

    2019-03-08/11:10:17 演示:使用注解的方式完成注入对象中的效果 注解参考链接:https://www.cnblogs.com/szlbm/p/5512931.html Spring中 ...

  2. Dynamics 365-关于Activity定制的一个细节

    有一个需求,是Lead上的activity创建的时候,更新regarding Entity上的某个字段信息.需求很简单,写个plugin,注册到对应activity的create事件上,Over... ...

  3. Android:随机生成算数四则运算简单demo(随机生成2~4组数字,进行加减乘除运算)

    首先创建一个新的Android工程,下面是页面布局: Java代码: 我们先来分析一下如何完成的步骤: 1.首先,先完成生成随机数.(包括随机生成几组数字,范围为多少的数字,四则运算符号等): 2.要 ...

  4. DVWA 黑客攻防演练(十二) DOM型 XSS 攻击 DOM Based Cross Site Scripting

    反射型攻击那篇提及到,如何是"数据是否保存在服务器端"来区分,DOM 型 XSS 攻击应该算是 反射型XSS 攻击. DOM 型攻击的特殊之处在于它是利用 JS 的 documen ...

  5. SQLServer之删除用户定义的数据库角色

    删除用户定义的数据库角色注意事项 无法从数据库删除拥有安全对象的角色. 若要删除拥有安全对象的数据库角色,必须首先转移这些安全对象的所有权,或从数据库删除它们. 无法从数据库删除拥有成员的角色. 若要 ...

  6. Windows服务的安装卸载及错误查找

    @echo off echo 清理原有服务项. . . %SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil /U D:\abc\te ...

  7. Linq语法常见普通语法

    闲言碎语 近期比较忙,但还是想写点什么,就分享一些基础的知识给大家看吧,希望能帮助一些linq新手,如果有其它疑问,可以进右上角群,进行交流探讨,谢谢. 开门见山 读这篇文章之前,我先说下,每一种搜索 ...

  8. 【不定期更新】FPGA/IC岗位常见笔试面试题总结(基础知识)

    1 数字IC(ASIC)设计流程: IC设计分为前端和后端.前端设计主要将HDL语言-->网表,后端设计是网表-->芯片版图. 前端主要有需求分析与架构设计.RTL设计.仿真验证.逻辑综合 ...

  9. Linux学习历程——Centos 7 chmod命令

    一.命令介绍 chmod 命令,是Linux管理员最常用的命令之一,用于修改文件或目录的访问权限. Linux系统中,每一个文件都有文件所有者和所属群组,并且规定文件的所有者,所属群组,以及其他人队问 ...

  10. 智表ZCELL产品V1.4.0开发API接口文档 与 产品功能清单

    为了方便大家使用ZCELL,应网友要求,整理编写了相关文档,现与产品一起同步发布,供大家下载使用,使用过程中如有疑问,请与我QQ联系. 智表(ZCELL)V1.4.0版本  功能清单文档下载地址: 功 ...