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

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. 登录时显示403 Access Denied

    用户名及密码设置如下: 在tomcat安装目录\conf\tomcat-users.xml中的<tomcat-users>标签内设置: <role rolename="ma ...

  2. 用Python写单向链表和双向链表

    链表是一种数据结构,链表在循环遍历的时候效率不高,但是在插入和删除时优势比较大. 链表由一个个节点组成. 单向链表的节点分为两个部分:存储的对象和对下一个节点的引用.注意是指向下一个节点. 而双向链表 ...

  3. 第八章 高级搜索树 (a2)伸展树:双层伸展

  4. 使用生活实例理解Asp.net运行时

    学习编程语言,掌握面向对象的编程思想尤为重要,一旦理解了面向对象的这种概念,那么好些地方拿到生活中去理解,就容易的多了.书本上的枯燥干涩的语言,对于好多人来说,即难懂,更难长时间牢牢记得.但是编程语言 ...

  5. 快速排序C++实现

    #include<iostream> using namespace std;class quicksort{ public: int quicks(int *a,int low,int ...

  6. LeetCode包括main函数的答题框架(Java+Eclipse)

    http://zhangnai.xin/2016/09/20/LeetCode-Framework/ 目录结构: LeetCode ——项目名称,方便Eclipse内置Git对代码进行管理和多终端同步 ...

  7. 向mysql数据库插入大量数据

    1. package com.zy.demo; import java.sql.Connection; import java.sql.DriverManager; import java.sql.P ...

  8. mysql非主键自增长

    mysql并非只有主键才能自增长,而是设为键的列就可以设置自增长.   如下: CREATE TABLE t1 ( id INT, col1 INT auto_increment NOT NULL ) ...

  9. 如何利用jQuery post传递含特殊字符的数据【转】

    在jQuery中,我们通常利用$.ajax或$.post进行数据传递处理,但这里通常不能传递特殊字符,如:“<”.本文就介绍如何传递这种含特殊字符的数据. 1.准备页面和控制端代码 页面代码如下 ...

  10. linux下iptables防火墙设置

    各位linux的爱好者或者工作跟linux相关的程序员,我们在工作中经常遇到应用服务器端口已经启动, 在网络正常的情况下,访问不到应用程序,这个跟防火墙设置有关 操作步骤 1.检查有没有启动防火墙 s ...