zoukankan      html  css  js  c++  java
  • 二进制求和方法——力扣题解

    解题思路:

    二进制求和,满二进一

    1.首先让两个字符串等长,若不等长,在短的字符串前补零,否则之后的操作会超出索引。
    2.然后从后到前遍历所有的位数,同位相加,这里有一个点,用的是字符相加,利用 ASCII 码,字符在内部都用数字表示,我们不需要知道具体数值,但可知 ‘0’-‘0’ = 0, ‘0’+1=‘1’,以此类推 。字符的加减,大小比较,实际上都是内部数字的加减,大小比较
    3.判断相加后的字符,若大于等于字符 ‘2’,下一位需要进一
    4.第 0 位数的相加在这里是单独处理的,因为它可能涉及到字符的插入(即是否需要在最前面加一位数 ‘1’

    代码c++

    class Solution {
    public:
        string addBinary(string a, string b) {
            int al = a.size();
            int bl = b.size();
            while(al < bl) //让两个字符串等长,若不等长,在短的字符串前补零,否则之后的操作会超出索引
            {
                a = '0' + a;
                ++ al;
            }
            while(al > bl)
            {
                b = '0' + b;
                ++ bl;
            }
            for(int j = a.size() - 1; j > 0; -- j) //从后到前遍历所有的位数,同位相加
            {
                a[j] = a[j] - '0' + b[j];
                if(a[j] >=  '2') //若大于等于字符‘2’,需要进一
                {
                    a[j] = (a[j] - '0') % 2 + '0';
                    a[j-1] = a[j-1] + 1;
                }
            }
            a[0] = a[0] - '0' + b[0]; //将ab的第0位相加
            if(a[0] >= '2') //若大于等于2,需要进一
            {
                a[0] = (a[0] - '0') % 2 + '0';
                a = '1' + a;
            }
            return a;
        }
    };
    
  • 相关阅读:
    数据库索引详解
    解决Eclipse中DDMS一直打印输出Connection attempts的问题
    发布一个关于SharePoint的管理小工具
    POJ 2895
    POJ 2909
    2020/6/9 [MRCTF2020]hello_world_go
    2020/5/31 [GKCTF2020]Chelly’s identity
    2020/5/30 [FlareOn6]Overlong
    2020/5/28 BUU_[WUSTCTF2020]level4
    2020/5/25 BUU_[WUSTCTF2020]level3
  • 原文地址:https://www.cnblogs.com/coding365/p/12872368.html
Copyright © 2011-2022 走看看