leetcode简单题之二进制求和

该篇文章介绍了一道编程题,即如何实现两个二进制字符串的相加。方法是通过补充0使字符串长度相同,然后从后向前逐位相加,同时处理进位,最终生成结果字符串。代码中使用了字符串的insert方法和字符到数字的转换。时间复杂度和空间复杂度均与字符串长度成正比。
摘要由CSDN通过智能技术生成

题目链接:力扣

我的做题思路:因为两个字符串可能不一样长,所以需要给短的那个字符串补0,先求出两个字符串的长度,然后从后面开始相加,用一个中间数来记录相加之后如果有进位产生的进位数字,做加法的时候需要将字符转换成数字(字符-'0')就可以将字符转成数字。在循环中定义一个add来做加法。将需要存储的数字从返回结果result的头部插入(result.insert(result.begin(),add%2+'0');)。如果加法已经算到字符串的第一位,那么看刚才定义的temp是否有进位,如果有进位,则需要再进行头部插入进位数字。

源码:

class Solution {
public:
    string addBinary(string a, string b) {
       string result="";
       int len1=a.size()-1;
       int len2=b.size()-1;
       int temp=0;
       while(len1>=0||len2>=0||temp!=0){//如果最后前两个条件不成立但是如果temp!=0的话,说明有进位
           int x=len1>=0?a[len1]-'0':0;//补0操作和字符转数字
           int y=len2>=0?b[len2]-'0':0;
           int add=x+y+temp;//记录做加法的结果
           result.insert(result.begin(),add%2+'0');//插入
           temp=add/2;//记录进位的情况
           len1--;
           len2--;
       }
       return result;
    }
};

时间复杂度: O(N);

空间复杂度: O(N),新开辟了一个字符串result。

相似题目,字符串相加https://leetcode.cn/problems/add-strings/

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值