我是靠谱客的博主 沉默花卷,最近开发中收集的这篇文章主要介绍leetcode二进制求和,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

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

示例1:

输入: a = "11", b = "1"
输出: "100"

示例2:

输入: a = "1010", b = "1011"
输出: "10101"

提示:

每个字符串仅由字符 '0''1' 组成。

1 <= a.length, b.length <= 10^4

字符串如果不是 "0" ,就都不含前导零。

整体思路:

我们通过举例子手动运算可以知道相加有三种情况

(1)0+0=0进0

(2)0+1=1+0=1进0

(3)1+1=1进1

这三种情况我们都考虑了a,b和进位数,因此从这个来入手。

相加时除了判断两个数相加是否为2还需要判断是否之前的有进位1,需要对进位进行处理,count即表示有无进位,res是我们的结果集。

代码题解:

class Solution {
public:
    string addBinary(string a, string b) {
    if(b.size()>a.size())//a存放长度较大的字符串
        {
            string temp=b;
            b=a;
            a=temp;
        }
    int m=a.size();//m为大,所以我们对b字符串进行补位时就要补成m位
    int n=b.size();
    for(int k=0;k<m-n;k++)//字符串加字符串,加到m-n-1位即可
    {
        b="0"+b;//字符加字符
    }
    string res;
    int count=0;
    for(int i=m-1;i>=0;i--)
    {
        if((a[i]-'0'+b[i]-'0'+count)==0)//上述第一种情况
        {
           res="0"+res;//每段的这个地方的相加以及count的赋值是值得好好思考的地方
           count=0;
        }
        else if((a[i]-'0'+b[i]-'0'+count)==1)
        {
            res="1"+res;
            count=0;
        }
        else if((a[i]-'0'+b[i]-'0'+count)==3)//这个就是本身1+1而且还有进位的情况
        {
            res="1"+res;
            count=1;
        }
        else
        {
            res="0"+res;
            count=1;
        }
    }
    if(count==1)//最后的位数相加如果还有进位,那就进1,“1”+res
    res="1"+res;
    return res;//最后返回结果集
    }
};

整体代码未经优化,不太好理解的可以直接带例子进去就比较好理解。

最后

以上就是沉默花卷为你收集整理的leetcode二进制求和的全部内容,希望文章能够帮你解决leetcode二进制求和所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(81)

评论列表共有 0 条评论

立即
投稿
返回
顶部