• 每日leetcode[二进制求和]


    给你两个二进制字符串,返回它们的和(用二进制表示)。

    输入为 非空 字符串且只包含数字 1 和 0

    新增知识:

    reverse函数:用于翻转字符串的顺序

    at 函数:用于对字符串中的字符取值

    push_back函数:向容器尾部添加元素

    size_t 无符号整数: 在数组下标,字符数和内存管理函数之类的地方广泛使用,用于表示正整数,出现负数会报错

    解题思路

    题目要求返回二进制表示的数字,所以要观察两个二进制数相加的规律,是逢二进一,分为进位和本位和,由于字符串索引是从低位到高位,即从左向右,而二进制数的低位在右边,所以首先要对二进制数进行翻转,然后从低位开始遍历求和,注意两个二进制数可能不是同位数的,要取数字最大的长度,从低位对其开始相加,如果最高位的进位不为0,要进行添加到末尾,最后将得到的二进制数字进行翻转。

    本位和: 两个数和上一位的进位数相加对2取模

    和为1:为1

    和为2:为0

    和为3:为1

    总结规律

    进位数:两个数和上一位的进位数相加整除2

    和为1:为1

    和为2: 为1

    和为3:为1

    总结规律

    代码:

    class Solution {

    public:

        string addBinary(string a, string b) {

            string ans;//设置新的二进制字符串

            reverse(a.begin(),a.end());

            reverse(b.begin(),b.end());//翻转两个二进制数于位数对应

            int l=max(a.size(),b.size());//取最大长度

            int k=0;//设定进位数字并初始化为0

            for(size_t i=0;i

            {

                k+=i

            if(i

            {

              k+=i

            }

            

            if(k%2==1)

            {

            ans.push_back('1');

            }

            else

            {

              ans.push_back('0');//添加进位和

            }

            k/=2;//进位发生变化

         

        }

        if(k!=0)

        {

            ans.push_back('1');

        }

        reverse(ans.begin(),ans.end());//最后翻转

        return ans;

        }

    };

  • 相关阅读:
    1.工具-VSCode有哪些常用快捷键
    sql中如何添加数据?
    使用vue3搭建后台系统的过程记录
    大数据必学Java基础(十八):条件运算符和位运算符
    目标检测YOLO实战应用案例100讲-船舶目标检测及编队识别(续)
    【紧急整理】《信息资源管理》信息资源管理的标准与法规,第5章
    在k8s中使用secret存储敏感数据与四种用法
    windows安装wsl2以及ubuntu
    Ubuntu 优化 与 问题记录
    unity 一键替换 UI上所有字体,批量替换字体(包括:Text和Text (TMP))
  • 原文地址:https://blog.csdn.net/weixin_62802660/article/details/126813653