zoukankan      html  css  js  c++  java
  • 【Leetcode】二进制求和

     

    解题思路:

    1. 首先在两个字符串前面补‘0’,使它们等长。否则要一直监督操作是否超出两个字符串的索引。

    2. 从后向前遍历所有位数,同位相加。字符相加,利用ASCII码,字符在内部都用数字表示,我们不需要知道具体数值,但可知 ‘0’ - ‘0’ = 0, ‘0’ + 1 = ‘1’,以此类推。字符的加减、比较大小,实际上都是内部数字的加减、比较大小

    3. 判断位数相加的结果,若大于等于字符‘2’,则需要向前一位进1.

    class Solution {
    public:
        string addBinary(string a, string b) {
            int al = a.size();
            int bl = b.size();
            int cl = al >= bl? al : bl;
            cl++;
            
            for(int i = 0; i < cl-al; i++)
                a = '0' + a;
            
            for(int j = 0; j < cl-bl; j++)
                b = '0' + b;
            
    
            for(int k = cl - 1; k > 0; k--){
                a[k] = a[k] - '0' + b[k];
                
                if(a[k] >= '2'){
                    
                    a[k-1] = a[k-1] + 1;
                    
                    a[k] = (a[k] - '0') % 2 + '0';
                }
            }
            
            if (a[0] == '0')
                a = a.substr(1, cl-1);
            
            return a;
        }
    };

    上述解法,时间复杂度O(n)。

    执行用时 :4 ms, 在所有 C++ 提交中击败了91.33%的用户
    内存消耗 :8.8 MB, 在所有 C++ 提交中击败了38.37%的用户
     
    附上一个大佬的解法,下回研究
    https://leetcode-cn.com/problems/add-binary/solution/10xing-cdai-ma-by-destinyskid/
  • 相关阅读:
    asp.net中的Application概述
    Android布局
    Content Provider
    Service
    进程和线程Processes and Threads
    Android模拟器
    Fragment
    Ui Event
    Loader
    sqlite3命令
  • 原文地址:https://www.cnblogs.com/gdut-gordon/p/11326072.html
Copyright © 2011-2022 走看看