关闭

二进制求和

标签: 字符串二进制
1856人阅读 评论(0) 收藏 举报
分类:

题目描述:给定两个二进制字符串,返回他们的和(用二进制表示)。

样例:a = 11;b = 1。返回 100


和之前链表求和(详见:点击打开链接)的逻辑一样,都是对于整数“序列化”的求和,主要考察的是对于序列(数组,字符串等)的操作的熟悉程度。

我们可以新建一个结果字符串——result,初始化为空,然后从后往前遍历两个给出的二进制字符串,对应位做二进制加法(当然要处理好进位的问题),然后依次将相加的结果添加到result中即可。

但是这个里面有个问题,就是两个二进制串的长度不一定相同,如果要对长度进行判断和处理的话,代码量显然太多。所以可以采取这样一种方法,如果说其中一个二进制字符串已经遍历完,我们再往下遍历时,就把这个二进制字符串的位看做0(其实已经没有了,但是看做0不会影响),相当于本来是11 + 1,现在变成了11 + 01,结果是不受影响的,但是写循环的时候则节省了代码量。

代码如下:

class Solution:
    # @param {string} a a number
    # @param {string} b a number
    # @return {string} the result
    def addBinary(self, a, b):
        index1, index2 = len(a) - 1, len(b) - 1
        result = ""
        # 进位的值,0表示不进位(进位0),1表示进位1
        add1 = 0
        while index1 >= 0 or index2 >= 0:
            t1 = int(a[index1]) if index1 >= 0 else 0
            t2 = int(b[index2]) if index2 >= 0 else 0
            temp = t1 + t2 + add1
            result = str(temp % 2) + result
            add1 = temp // 2
            index1 -= 1
            index2 -= 1
        if add1 == 1:
            result = "1" + result
        return result
        # Write your code here
注意一下,不要忘了18行对最后进位的处理。代码很简单,但是需要细心。

0
0
查看评论

LintCode Add Binary 二进制求和

LintCode Add Binary 二进制求和
  • wutingyehe
  • wutingyehe
  • 2015-06-18 17:27
  • 2400

【LintCode-408】二进制求和(Java实现)

第一次代码记录(不带注释版本): public String addBinary(String a, String b) { int alength=a.length(); int blength=b.length(); String resul...
  • YangDongChuan1995
  • YangDongChuan1995
  • 2017-11-05 16:28
  • 170

二进制求和

题目描述:给定两个二进制字符串,返回他们的和(用二进制表示)。 样例:a = 11;b = 1。返回 100 和之前链表求和(详见:点击打开链接)的逻辑一样,都是对于整数“序列化”的求和,主要考察的是对于序列(数组,字符串等)的操作的熟悉程度。 我们可以新建一个结果字符串——result,初始化...
  • guoziqing506
  • guoziqing506
  • 2016-06-01 14:39
  • 1856

笔试题之二进制输出两数相加

面试题之二进制输出两数相加 个人信息:就读于燕大本科软件工程专业 目前大三; 本人博客:google搜索“cqs_2012”即可; 个人爱好:酷爱数据结构和算法,希望将来搞科研为人民作出自己的贡献; 博客内容:面试题之二进制输出两数相加; 博客时间:2014-4-1 编程语言:C++ ...
  • cqs_2012
  • cqs_2012
  • 2014-04-02 11:30
  • 1794

lintcode 二进制求和 给定两个二进制字符串,返回他们的和(用二进制表示)。

Lintcode容易题 二进制求和 查看运行结果  15:00  Start 给定两个二进制字符串,返回他们的和(用二进制表示)。 您在真实的面试中是否遇到过这个题?  Yes 样例 a = 11 b = 1 返回&#...
  • cjt5047
  • cjt5047
  • 2016-02-21 18:06
  • 2749

LIntCode-二进制求和

容易二进制求和给定两个二进制字符串,返回他们的和(用二进制表示)。样例a = 11b = 1返回 100public class Solution { /** * @param a a number * @param b a number ...
  • Sunny_Ran
  • Sunny_Ran
  • 2015-10-11 21:57
  • 901

二进制反码求和

在看TCP/IP 时,看到IP 协议中有个 首部检验和 是用的 二进制反码求和。 不太理解,上网搜到了一个答案,记载下面。 以4bit(计算方便一点,和16bit是一样的)做检验和来验证。  假设原始数据为 1100 , 1010 , 0000(校验位)...
  • u012063703
  • u012063703
  • 2015-05-19 21:43
  • 1729

LintCode(容易)二进制求和

class Solution { public: /** * @param a a number * @param b a number * @return the result */ string addBinary(string& ...
  • Jang1996
  • Jang1996
  • 2016-07-20 14:28
  • 419

IP:网际协议中的二进制反码求和算法。。

链接:http://www.jb51.net/article/30028.htm 以4bit(计算方便一点,和16bit是一样的)做检验和来验证。 建设原始数据为 1100 , 1010 , 0000(校验位) 那么把他们按照4bit一组进行按位取反相加。 1100取反0011 , 1010取反是...
  • u010235142
  • u010235142
  • 2016-11-16 14:20
  • 903

二进制反码求和校验算法

原文链接:http://blog.chinaunix.net/uid-26758209-id-3146230.html 二进制反码求和校验算法     经常看计算机网络相关的书时,每次看到关于IP或者是UDP报头校验和时,都是一笑而过,以为相当简单的东西,不就是1...
  • dingmin1860
  • dingmin1860
  • 2015-09-07 17:22
  • 8876
    个人资料
    • 访问:204334次
    • 积分:4092
    • 等级:
    • 排名:第8970名
    • 原创:212篇
    • 转载:0篇
    • 译文:0篇
    • 评论:39条
    博客专栏
    文章分类
    最新评论