OJ练习18——T67 Add Binary

把以字符串表示的两个二进制数相加。

【思路】

活学活用昨天学到的reverse。将倒序相加变成正序相加。

但这样的话,就要用到三个reverse,两个原串,最后还要把结果翻转。

可能对速度有影响,经测试,好像还比不翻转快一点点。

一个point是,两串长度不同,一串加完了另一串怎么办?

我的办法是将其视为0,这样就能统一为 a[i]+b[i]+flag的形式。

【my code】

string addBinary(string a, string b) {
    string c="";
    int i, j;
    int aa,bb;
    int flag=0;
    reverse(a.begin(), a.end());
    reverse(b.begin(), b.end());
    for(i=0; i<a.size()||i<b.size(); i++)
    {
        if(i<a.size()&&i<b.size()){
            aa=a[i]-‘0‘;
            bb=b[i]-‘0‘;
        }
        else if(i>=a.size()){
            aa=0;
            bb=b[i]-‘0‘;
        }
        else if(i>=b.size()){
            bb=0;
            aa=a[i]-‘0‘;
        }
        if(aa+bb+flag>2){
            c.push_back(‘1‘);
            flag=1;
        }
        else if(aa+bb+flag>1){
            c.push_back(‘0‘);
            flag=1;
        }
        else if(aa+bb+flag>0){
            c.push_back(‘1‘);
            flag=0;
        }
        else{
            c.push_back(‘0‘);
            flag=0;
        }
    }

    if(flag==1)
        c.push_back(‘1‘);
    reverse(c.begin(), c.end());
    return c;

}

【other code】

class Solution {
public:
    string addBinary(string a, string b) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        int flag = 0;

        int aIndex = a.size() - 1;
        int bIndex = b.size() - 1;

        string c;

        while(aIndex >= 0 && bIndex >= 0)
        {
            int num = a[aIndex] - ‘0‘ + (b[bIndex] - ‘0‘) + flag;
            flag = num / 2;
            num %= 2;

            c = (char)(num + ‘0‘) + c;

            aIndex--;
            bIndex--;
        }

        while(aIndex >= 0)
        {
            int num = a[aIndex] - ‘0‘ + flag;
            flag = num / 2;
            num %= 2;

            c = (char)(num + ‘0‘) + c;

            aIndex--;
        }

        while(bIndex >= 0)
        {
            int num = b[bIndex] - ‘0‘ + flag;
            flag = num / 2;
            num %= 2;

            c = (char)(num + ‘0‘) + c;

            bIndex--;
        }

        if (flag > 0)
            c = (char)(flag + ‘0‘) + c;

        return c;
    }
};

【评价】

1.用string的“+”操作可以将两个串按自己想要的顺序连接,这样就把新的结果放在前面,再连上以前的结果,最后不需要翻转。

这个技巧要学会。

2.flag=num/2;

num%=2;

两句话就表明了我for中的一大坨,两者结合,代码就更短啦!

【郑重声明】

每篇文章的other code皆是百度直接搜索题目的结果,大部分来自remolostime的博客园,地址是:

http://www.cnblogs.com/remlostime/tag/LeetCode/

向前辈致敬。

时间: 2024-08-28 01:42:39

OJ练习18——T67 Add Binary的相关文章

LeetCode: Add Binary 解题报告

Add BinaryGiven two binary strings, return their sum (also a binary string). For example,a = "11"b = "1"Return "100". SOLUTION: 指针指到两个字符串的末尾,不断往前推进,用carry表示进位.用stringbuilder来记录结果. 使用insert(0, c)函数将加出的结果不断插入到STRINGBUILDER. 1 p

[leetcode]Add Binary @ Python

原题地址:https://oj.leetcode.com/problems/add-binary/ 题意: Given two binary strings, return their sum (also a binary string). For example,a = "11"b = "1"Return "100". 解题思路:提供两种实现方式吧. 代码一: class Solution: # @param a, a string # @pa

LeetCode OJ - Minimum &amp;&amp; Maximum Depth of Binary Tree

这两道题用递归的解法都很简单,只是稍有不同. 下面是AC代码: 1 /** 2 * Given a binary tree, find its minimum depth. 3 * the minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node. 4 * @param root 5 * @return 6 */ 7 public in

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". 1 public class Solution { 2 public String addBinary(String a, String b) { 3 String res ="";

[LeetCode][JavaScript]Add Binary

https://leetcode.com/problems/add-binary/ Add Binary Given two binary strings, return their sum (also a binary string). For example,a = "11"b = "1"Return "100". 长整型二进制加法. 1 /** 2 * @param {string} a 3 * @param {string} b 4 *

Add Binary Leetcode java

题目: Given two binary strings, return their sum (also a binary string). For example, a = "11" b = "1" Return "100". 题解: 二进制加法都是从最低位(从右加到左).所以对两个字符串要从最后一位开始加,如果遇见长度不一的情况,就把短的字符串高位补0. 每轮计算要加上进位,最后跳出循环后要坚持进位是否为1,以便更新结果. 代码如下(from

[LeetCode] [Add Binary 2012-04-02 ]

Given two binary strings, return their sum (also a binary string). For example, a = "11" b = "1" Return "100". string 的操作,短string补位.两个"0"会输出一个"00",要特殊处理,plus如果最后为"1",要补上. ? 1 2 3 4 5 6 7 8 9 10 1

No.67 Add Binary

No.67 Add Binary Given two binary strings, return their sum (also a binary string). For example,a = "11"b = "1"Return "100". 与No.2 Add Two Numbers的思路非常相似,不同在:对其进行运算时,其实是要逆向相加的!!!因为边界控制的原因,可先将字符串逆序reverse( ). 1 #include "

2016.6.21——Add Binary

Add Binary 本题收获:1.string中默认每个元素为char型 2.从int型转化为char型  s[i] - '0' 从char型转化为int型  s[i] + '0' 3.char型和int型相加时按上式会报错   s = (char)(s[i] + '0') +s s = (char)(s[i] + '0') +s 这样的写法 每次新的s(由(char)(s[i] + '0'))会放在左边,(加的s为老的s) s += (char)(s[i] + '0') 每次新的s会放在右边