zoukankan      html  css  js  c++  java
  • leetcode 67 Add Binary

    Add Binary Total Accepted: 46815 Total Submissions: 189215 My Submissions

                         

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

    For example,
    a = "11"
    b = "1"
    Return "100".


    我的解决方案:

    class Solution {
    public:
        string addBinary(string a, string b) 
        {
            
            string result = "";
            int c = 0;
            int i = a.size() - 1;
            int j = b.size() - 1;
            
            while(i >= 0 || j >=0 ||c ==1)
            {
                c += i >= 0 ? a[i--] - '0':0;
                c += j >= 0 ? b[j--] - '0':0;
                result = char( c% 2 + '0') + result;
                c /= 2;
                
            }
            
            return result;
            
            
        }
    };


    c语言解决方案:

    char* addBinary(char* a, char* b) {
        int n, m;
        for (n=0; *a; a++, n++) ;
        for (m=0; *b; b++, m++) ;
        char *p = (char*)malloc(m>n ? m+2 : n+2), *last = p;
        int c = 0;
        while (n || m || c) {
            int s = c;
            if (n) {
                s += *(--a)-'0';
                --n;
            }
            if (m) {
                s += *(--b)-'0';
                --m;
            }
            *last++ = (s&1)+'0';
            c = s>>1;
        }
        *last=0;
        char *start = p, t;
        while (start+1 < last) { // reverse string
            t = *start;
            *start++=*(--last);
            *last=t;
        }
        return p;
    }

    数字电路版本代码:加法器的实现
    https://leetcode.com/discuss/40846/c-4ms-solution-inspired-by-hardware-full-adder-circuit



    python 的三个版本:


    class Solution:
        # @param {string} a
        # @param {string} b
        # @return {string}
        def addBinary(self, a, b):
            i, m, n, result, carry = 1, len(a), len(b), [], 0
            while i <= m or i <= n:
                temp = carry
                if i <= m:
                    temp += int(a[-i])
                if i <= n:
                    temp += int(b[-i])
    
                carry = temp / 2
                result.append(str(temp % 2))
                i += 1
    
            if carry:
                result.append(str(carry))
    
            return ''.join(result[::-1])
    
    or a really short one if you want
    
    class Solution:
        # @param {string} a
        # @param {string} b
        # @return {string}
        def addBinary(self, a, b):
            return '{0:b}'.format(int(a, 2) + int(b, 2))
    
    
    class Solution:
        # @param {string} a
        # @param {string} b
        # @return {string}
        def addBinary(self, a, b):
            return bin(int(a,2) + int(b,2))[2:]




    
  • 相关阅读:
    spark shuffle过程分析
    Android实现网络多线程断点续传下载
    幻世(OurDream)TM 2D图形引擎开通捐赠渠道
    MDA模型定义及扩展
    STL在迭代的过程中,删除指定的元素
    c# POST和GET方式通过server地址提交数据
    Python爬虫抓取csdn博客
    Word Ladder II
    HDU 4183 Pahom on Water(最大流SAP)
    poj1011 Sticks
  • 原文地址:https://www.cnblogs.com/wangyaning/p/7853951.html
Copyright © 2011-2022 走看看