这个题目相对有点奇怪,题目如下:

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

For example,

a = "11"

b = "1"

Return "100".

可能是我思路的问题吧,我之前是在考虑先将string转成int或者double,然后将二进制转为十进制进行计算,最后再将这个十进制转为二进制再转为string返回。这个思路本来是没问题的。但是。。。。。在最后一个测试用例中,他给了一个超长的二进制串,其实也是,一个长度为100的string是很正常的,但是如果这个长度为100的string是一个二进制数,这个数字就已经挺可怕的了。我又不想强行引入big num,所以我写了一套string的二进制加法器。

题解如下:

class Solution {
public:
string addBinary(string a, string b)
{
reverse(a.begin(), a.end());
reverse(b.begin(), b.end()); int i = 0;
int flag = 0;
int lenA = a.length();
int lenB = b.length(); string c = "";
while (i < lenA && i < lenB)
{
if (a[i] - '0' + b[i] - '0' + flag >= 2)
{
c += (a[i] - '0' + b[i] - '0' + flag) % 2 + '0';
flag = 1;
}
else
{
c += a[i] - '0' + b[i] - '0' + flag + '0';
flag = 0;
}
i++;
} while (i < lenA)
{
if (a[i] - '0' + flag == 2)
{
flag = 1;
c += "0";
}
else
{
c += a[i] - '0' + flag + '0';
flag = 0;
}
i++;
} while (i < lenB)
{
if (b[i] - '0' + flag == 2)
{
flag = 1;
c += "0";
}
else
{
c += b[i] - '0' + flag + '0';
flag = 0;
}
i++;
} if (flag == 1)
{
c += "1";
} reverse(c.begin(), c.end()); return c;
}
};

在这里用flag来表示前一位是否进位,这里要注意的就是有可能本身的两位加上进位的flag会出现3的情况,所以要考虑取余。其余的都很简单。

[leetcode] 16. Add Binary的更多相关文章

  1. LeetCode 面试:Add Binary

    1 题目 Given two binary strings, return their sum (also a binary string). For example,a = "11&quo ...

  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. 【leetcode】Add Binary

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

  5. Java for LeetCode 067 Add Binary

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

  6. LeetCode 67. Add Binary

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

  7. Java [Leetcode 67]Add Binary

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

  8. LeetCode(56)-Add Binary

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

  9. (String) leetcode 67. Add Binary

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

随机推荐

  1. jenkins systemctl启动失败

    centos yum或者rpm安装jenkins后起不来 vi /etc/init.d/jenkins candidates="/usr/local/jdk1.8.0_171/bin/jav ...

  2. 引用mvvmlight dll ,操作command

    前言 因为vs2010没有集成mvvmlight 所以想要使用mvvmlight的relaycomman需要引用dll 需要测试某个功能的时候,不能进行快带的集成 引用mvvmlight dll 如果 ...

  3. IE6、IE7、Firefox中margin问题及input解决办法

    margin不居中的问题 .div{ margin:10px;/*ff*/ *margin:15px;/*ie7*/ _margin:15px;/*ie6*/  尺寸会变为正常的两倍,按道理应为5px ...

  4. Asp.net中FileUpload控件实现图片上传并带预览显示

    单一图片上传——“选择”+“上传”,.NET默认模式: 1.实现原理:     采用FileUpload控件默认的使用方式,先由“选择”按钮选择图片,然后单击“上传”按钮完成上传,并可在“上传”按钮的 ...

  5. day9:vcp考试

    Q161. An administrator wants to select a Host Power Management Policy for an ESXi 6.x host that will ...

  6. ftp使用(图文详解)

    41,准备: FileZilla_Server-v0.9.41.rar 2.安装,可以全部默认下一步 这里装在了E盘 3安装成功添加用户 添加用户名yanan 选择share folders选择要共享 ...

  7. Spring框架的事务管理相关的类和API

    1. PlatformTransactionManager接口 -- 平台事务管理器.(真正管理事务的类).该接口有具体的实现类,根据不同的持久层框架,需要选择不同的实现类! 2. Transacti ...

  8. src/lxml/includes/etree_defs.h:14:31: 致命错误:libxml/xmlversion.h:没有那个文件或目录

    fedora21平台下解决办法:yum install libxml-devel ubuntu下可以使用 apt-get intalll xxxx 如果仍然出现,可以尝试安装这两个包libxslt-d ...

  9. linux永久关闭防火墙

  10. wcf数据推送

    http://www.cnblogs.com/artech/archive/2007/03/02/661969.html