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;
        }
    };
    
  • 相关阅读:
    分享微云普通用户不限速下载方法
    PS基础之移动工具和分布对齐
    操作系统的概念、功能和目标
    又拍云+PicGo搭建图床教程
    05 数组
    04 循环结构
    02 数据类型_变量_运算符_表达式
    03 流程控制
    05 方法_递归
    win7下使用telnet的方法
  • 原文地址:https://www.cnblogs.com/coding365/p/12872368.html
Copyright © 2011-2022 走看看