zoukankan      html  css  js  c++  java
  • 【每天一题】LeetCode 0067. 二进制求和


    开源地址:https://github.com/jiauzhang/algorithms


    题目描述

    * https://leetcode-cn.com/problems/add-binary
    * 给定两个二进制字符串,返回他们的和(用二进制表示)。
    * 输入为非空字符串且只包含数字 1 和 0。
    * 
    * 示例 1:
    *     输入: a = "11", b = "1"
    *     输出: "100"
    * 
    * 示例 2:
    *     输入: a = "1010", b = "1011"
    *     输出: "10101"
    

    题目描述

    * 1. 二进制运算相当简单了,不同之处在于这里是操作的字符串
    *    所以需要程序实现字符相加的二进制运算
    * 2. 两个二进制字符相加,再加上进位位,总共有种可能的结果
    *    0, 1, 2, 3,所以最直白的做法就是写四个 if 语句即可
    * 3. 但是为了进一步优化,我们可以定义一个数组,如程序中所示
    *    最后直接根据数组获取进位位的值和当前和的结果即可
    *    本来需要四条 if 语句的操作直接一步就可以解决了!
    

    题目描述

    class Solution {
    public:
        string addBinary(string a, string b) {
            if (a.size() < b.size()) {
                do_add(b, a);
                return b;
            }            
            else {
                do_add(a, b);
                return a;
            }            
        }
    
        void do_add(string &a, string &b) {
            char cs[4] = {0, 0, 1, 1};
            char ss[4] = {'0', '1', '0', '1'};
            char carry = 0;
            char base = '0';
            int i = a.size() - 1;
            int j = b.size() - 1;
            while (j >= 0 || (carry && i >= 0)) {
                char sum = 0;
                if (j >= 0) {
                    sum += b[j] - base;
                }
    
                sum += a[i] - base;
                sum += carry;
                a[i] = ss[sum];
                carry = cs[sum];
    
                i--;
                j--;
            }
    
            if (carry)
                a = '1' + a;
        }
    };
    
  • 相关阅读:
    [转]AsyncTask的用法
    [转]Android Service学习之本地服务
    强制页面运行于IE8模式下
    标签分类
    获取元素的文本
    遍历节点的API
    为IE的javascript提速
    我的选择器 获得经过标记的没有重复的tagName等于tag的元素集
    kangax 的javascript谜题
    自动执行函数
  • 原文地址:https://www.cnblogs.com/jiau/p/11668128.html
Copyright © 2011-2022 走看看