• 每日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;

        }

    };

  • 相关阅读:
    ip命令
    [go学习笔记.第十六章.TCP编程] 1.基本介绍以及入门案例
    北方直播卖货搞钱“第一城“,竟然是临沂,200万人发家快手电商
    CF1477D Nezzar and Hidden Permutations 题解
    tkinter文本框小功能(6):锚点
    10w字的Java面试手册,基本涵盖了所有会问的
    数字化转型之数字资产知识库(springboot+es+vue+neo4j)
    GPT-4 到底能帮你干点啥?
    Allegro Design Entry HDL(OrCAD Capture HDL)编辑对象菜单详细介绍
    人工智能 知识图谱
  • 原文地址:https://blog.csdn.net/weixin_62802660/article/details/126813653