题解 | #二进制求和#

二进制求和

http://www.nowcoder.com/practice/1620262056c24c0e96de32fb261703d0

题意:
        给定两个用字符串表示的二进制数,返回他们的和。

方法一:
模拟

思路:
        直接模拟。
        逆序遍历字符串,实现对应位的相加求和运算;
        并对进位进行判断,追加字符给结果字符串;
        最后,反转结果字符串即可。

        

class Solution {
public:
    
    string binaryAdd(string A, string B) {
        int n1=A.size(),n2=B.size();
        int flag=0;//进位标志
        string res="";
        for(int i=n1-1,j=n2-1;i>=0||j>=0;i--,j--){//逆向遍历
            //计算求和
            int t=flag;
            if(i>=0)
                t+=A[i]-'0';
            if(j>=0)
                t+=B[j]-'0';
            if(t>=2){//判断进位
                flag=1;
            }else{
                flag=0;
            }
            t%=2;
            res+=t+'0';//追加字符
        }
        if(flag){//最后判断进位
            res+='1';
        }
        reverse(res.begin(),res.end());//反转结果字符串
        return res;
    }
};

时间复杂度:
空间复杂度:

方法二:
java

思路:
        java实现逆序模拟。
        思路与方法一相同。
        注意点:答案字符串追加字符串需要强制类型转换。

import java.util.*;


public class Solution {
    
    public String binaryAdd (String A, String B) {
        int n1=A.length(),n2=B.length();
        int flag=0;//进位标志
        StringBuffer res=new StringBuffer("");
        for(int i=n1-1,j=n2-1;i>=0||j>=0;i--,j--){//逆向遍历
            //计算求和
            int t=flag;
            if(i>=0)
                t+=A.charAt(i)-'0';
            if(j>=0)
                t+=B.charAt(j)-'0';
            if(t>=2){//判断进位
                flag=1;
            }else{
                flag=0;
            }
            t%=2;
            res.append((char)(t+'0'));//追加字符
        }
        if(flag==1){//最后判断进位
            res.append('1');
        }
        //反转结果字符串
        return res.reverse().toString();
    }
}


时间复杂度:
空间复杂度:









全部评论

相关推荐

头像 会员标识 头像
昨天 14:43
已编辑
西安交通大学 数学类
BG 双9,因为之前一直考虑想出国想读博士,因此研二一直在被导催着写论文,一直写到五月初,大部分工作都做的差不多了,五一回去跟女朋友一直在玩儿,出于很多原因想直接就业(想赚钱摆烂),临时开始找实习,因为只做过华为的横向(理论),加上完全从五月初才开始刷leetcode,本来本科只浅浅学了一下c++,后来发现python做起来简单多了,开始准备python和leetcode去试一下算法岗(研究方向是优化理论相关的)。5.10 过了简历5.15 当晚有临时有汇报,让调了一下机试时间5.22 机试三道题,一道最大公共子串动态规划,一道图模型用的dijstra解决,第三道不太会就没写了,机试300分5.30 下午五点半技术面试,面试官对我导在的实验室有了解,对我刚弄完的论文很有兴趣,但其实非常理论,做的快速算法,主要是理论工作,直接找了之前组会ppt详细讲了一下,面试官感觉很满意,场面非常愉快。最后撕了个算法,leetcode 714,也是动态规划,写了状态方程说了一下返回值,面试官直接就让过了。5.30 下午六点半主管面,问了一下项目相关,之后主要是问有没有经历什么挫折,如何看待团队合作,有没有从0到1学习一些新知识体系,如何看待华为文化之类的。5.31 晚上八点主管面过,问了一下HR,说是端午前后开奖,看看华子怎么说了,能有实习刷简历最好,不行直接回组里先做横向去了。其实从我五月初开始第一次用牛客和leetcode,感觉看牛客真是给自己添加了不少焦虑,焦虑拉满,毕竟非科班加起步晚,都感觉自己不用考虑实习了,后来跟女朋友说到这个事,得到了我的小天使的超级开解,让我觉得人生其实容错率很高,希望焦虑的同学们放宽心一些,觉得懒了就向上看,觉得累了就向下看,大部分时间平视就ok了。6.1 有这么多人看吗,感觉大家貌似对找实习流程都不是很感兴趣,关注点不太对哦。看大家对我对象都很感兴趣,也不是不可以再分享一些被爱的小经历。从大二还比较青涩的时光到去年我的外院小女友去兼职雅思教师,我也是从强撑大男子主义到拥抱了吃软饭的新天地。其实本来只是想发个动态截个图打趣一下我对象,也不乏一些小小炫耀的心思。真心希望各位牛友在使自己优秀的同时(看牛客是真的焦虑)也能遇到那个真心爱你的女孩。有熟人看到吱一声,马上删
投递华为等公司10个岗位
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务