首页 > 代码库 > LeetCode Add Binary 两个二进制数相加
LeetCode Add Binary 两个二进制数相加
1 class Solution { 2 public: 3 string addBinary(string a, string b) { 4 if(a==""&&b=="") return ""; 5 if(a=="") return b; 6 if(b=="") return a; 7 char *pa=&a[0],*pb=&b[0]; 8 int na=0,nb=0; 9 int i=0;10 int t=0,m=0;11 while(*pa!=‘\0‘){12 pa++;13 na++;14 }15 pa--;16 while(*pb!=‘\0‘){17 pb++;18 nb++;19 }20 pb--;21 if(na>=nb){ //存a中22 for(i=na-1;i>-1;i--){23 if(i>na-nb-1){24 m=(*pa-‘0‘) + (*pb-‘0‘)+t;25 pa--;26 pb--;27 }28 else if( i<na-nb &&t ==0 )29 return a;30 else{31 m=(*pa-‘0‘)+t;32 pa--;33 }34 t=m/2; //进位35 m=m%2; //当前位36 a[i]=m+‘0‘;37 }38 if(t>0)39 return ("1"+a);40 else41 return a;42 }43 else{ //存b中44 for(i=nb-1;i>-1;i--){45 if(i>nb-na-1){46 m=(*pb-‘0‘) + (*pa-‘0‘)+t;47 pa--;48 pb--;49 }50 else if( i<nb-na &&t ==0 )51 return b;52 else{53 m=(*pb-‘0‘)+t;54 pb--;55 }56 t=m/2; //进位57 m=m%2; //当前位58 b[i]=m+‘0‘;59 }60 if(t>0)61 return ("1"+b);62 else63 return b;64 }65 }66 };
题意:给出两个字符串,里面分别存有一个二进制数,将二进制相加后返回结果,依然是字符串型。
思路:两个指针,从后面开始将两个二进制数相加,如果有一个比较长,那么另一个指针肯定先扫完一个字符串,此时将结果保存在较长的那个字符串中返回。在一个字符串已扫完的情况下,另一个字符串的未扫完部分扔要判断是否需要继续加,这取决于进位是否为0,若为0,连后面未扫部分都不用扫了,直接返回这个扔有未扫的字符串。若进位不为0,那么就要一个个继续扫下去了,只要满足一个条件就能不用继续往下扫,此条件是进位为0。若未扫完的那个字符串扫到完了,需再考虑一次进位。
吐槽:代码是草稿代码,但是AC了,从比较容易理解的角度写的。
LeetCode Add Binary 两个二进制数相加
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。