lintcode 容易题:Add Binary 二进制求和

题目:

二进制求和

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

样例

a = 11

b = 1

返回 100

解题:

和求两个链表的和很类似

考虑进位,考虑最后一项的进位

0+0 = 0 不需要进位

0+1 = 1 不需要进位

1+1 =0  进位 1

同时注意

低位进1,高位时1+1的情况,直接加就是3了,这个需要进位1 ,原位的结果也是1的情况

Java程序:

public class Solution {
    /**
     * @param a a number
     * @param b a number
     * @return the result
     */
    public String addBinary(String a, String b) {
        // Write your code here
        String result = "";
        int aLen = a.length() - 1;
        int bLen = b.length() - 1;
        int sum = 0;
        while(aLen>=0 || bLen>=0){
            if(aLen>=0){
                sum +=Integer.parseInt(a.substring(aLen,aLen+1));
                aLen--;
            }
            if(bLen>=0){
                sum +=Integer.parseInt(b.substring(bLen,bLen+1));
                bLen--;
            }
            if(sum==2){
                result = "0" + result;
                sum=1;
            }else if(sum==0 || sum==1) {
                result = sum +"" + result;
                sum = 0;
            }else if(sum==3){
                result = "1" + result;
                sum = 1;
            }
        }
        if(sum==1)
            result = "1" + result;
        return result;

    }
}

Python程序:
总耗时: 10156 ms

class Solution:
    # @param {string} a a number
    # @param {string} b a number
    # @return {string} the result
    def addBinary(self, a, b):
        # Write your code here
        result =‘‘
        aLen = len(a) - 1
        bLen = len(b) - 1
        sum = 0
        while aLen>=0 or bLen>=0:
            if aLen>=0:
                sum += int(a[aLen])
                aLen-=1
            if bLen>=0:
                sum+= int(b[bLen])
                bLen-=1
            if sum==3:
                result = ‘1‘ + result
                sum=1
            elif sum==2:
                result = ‘0‘ + result
                sum=1
            else:
                result = str(sum) + result
                sum = 0
        if sum==1:
            result = ‘1‘ + result
        return result

总耗时: 523 ms

时间: 2024-12-05 03:14:38

lintcode 容易题:Add Binary 二进制求和的相关文章

LeetCode 第 67 题 (Add Binary)

LeetCode 第 67 题 (Add Binary) Given two binary strings, return their sum (also a binary string). For example, a = "11" b = "1" Return "100". 两个字符串,计算加法.这道题主要是考察对字符串操作的掌握情况.另外,加法要从低位算起,但是输出时要先输出高位.因此,需要将计算结果先存下来,然后再逆序输出. 访问字符串的

leetcode_67题——Add Binary(字符串string,反向迭代器reverse_iterator,栈stack)

Add Binary Total Accepted: 39288 Total Submissions: 158078My Submissions Question Solution Given two binary strings, return their sum (also a binary string). For example,a = "11"b = "1"Return "100". Hide Tags Math String Have

lintcode 中等题:binary tree level order traversal ii 二叉树的层次遍历II

题目 二叉树的层次遍历 II 给出一棵二叉树,返回其节点值从底向上的层次序遍历(按从叶节点所在层到根节点所在的层遍历,然后逐层从左往右遍历) 样例 给出一棵二叉树 {3,9,20,#,#,15,7}, 3 / 9 20 / 15 7 按照从下往上的层次遍历为: [ [15,7], [9,20], [3] ] 解题 和上一题的答案反过来 直接每次在list中第一个位置加入当前层结点 /** * Definition of TreeNode: * public class TreeNode { *

第30题 Add Binary

Given two binary strings, return their sum (also a binary string). For example, a = "11" b = "1" Return "100". Hide Tags Math String Solution in Java: public class Solution { public String addBinary(String a, String b) { int

lintcode 中等题:binary tree serialization 二叉树的序列化和反序列化

题目 二叉树的序列化和反序列化 设计一个算法,并编写代码来序列化和反序列化二叉树.将树写入一个文件被称为“序列化”,读取文件后重建同样的二叉树被称为“反序列化”. 如何反序列化或序列化二叉树是没有限制的,你只需要确保可以将二叉树序列化为一个字符串,并且可以将字符串反序列化为原来的树结构. 样例 给出一个测试数据样例, 二叉树{3,9,20,#,#,15,7},表示如下的树结构: 3 / 9 20 / 15 7 我们的数据是进行BFS遍历得到的.当你测试结果wrong answer时,你可以作为输

lintcode 中等题:binary tree level order traversal 二叉树的层数遍历

题目 二叉树的层次遍历 给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问) 样例 给一棵二叉树 {3,9,20,#,#,15,7} : 3 / 9 20 / 15 7 返回他的分层遍历结果: [ [3], [9,20], [15,7] ] 挑战 挑战1:只使用一个队列去实现它 挑战2:用DFS算法来做 解题  队列很容易,先加入,然后取出来的同时加入左右孩子节点 在剑指offer中有个题目和这个很类似,其只是层次遍历二叉树,没有要求把每层的节点单独放在一起的. 上面说的规律:每一次打印一

lintcode 容易题:Binary Tree Preorder Traversal 二叉树的前序遍历

题目: 二叉树的前序遍历 给出一棵二叉树,返回其节点值的前序遍历. 样例 给出一棵二叉树 {1,#,2,3}, 1 2 / 3 返回 [1,2,3]. 挑战 你能使用非递归实现么? 解题: 通过递归实现,根节点->左节点->右节点 Java程序: /** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(in

lintcode 容易题:Binary Tree Inorder Traversal 二叉树的中序遍历

题目: 二叉树的中序遍历 给出一棵二叉树,返回其中序遍历 样例 给出二叉树 {1,#,2,3}, 1 2 / 3 返回 [1,3,2]. 挑战 你能使用非递归算法来实现么? 解题: 程序直接来源 Java程序: /** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { * this.val

leetCode 67.Add Binary (二进制加法) 解题思路和方法

Given two binary strings, return their sum (also a binary string). For example, a = "11" b = "1" Return "100". 思路:二进制加法,比较简单.代码如下: public class Solution { public String addBinary(String a, String b) { int len = Math.max(a.len