leetcode:add binary 菜鸟解法

来源:互联网 发布:javascript有map吗 编辑:程序博客网 时间:2024/06/14 20:07

我确实比较水,所以费尽千辛玩苦终于挑了一个好想比较简单的题,结果没想到还是不行...


初始想法:

设两个字符串分别为at和b,然后把他们两个转成整形后相加(每一位有三种可能,0,1,2),然后根据所得结果决定是否要进位,结束后输出字符串。

程序如下所示,能通过几个案例,可是因为整形取值空间不够,所以输入很大时候就没辙了。


class Solution {public:    string addBinary(string a, string b) {        long long first,second,sum,temp=0;string result="1";char bit[200];char final[200];first = atoi(a.c_str());second = atoi(b.c_str());sum = first + second;sprintf(bit,"%lld",sum); for(int i=strlen(bit)-1;i>=0;i--){if (bit[i]=='2'&&temp==0) {final[i]='0';temp = 1;}else if (bit[i]=='2'&&temp==1) {final[i]='1';}else if (bit[i]=='1'&&temp==1) {final[i]='0';}else if (bit[i]=='1'&&temp==0){final[i]='1';}else if (bit[i]=='0'&&temp==0){final[i]='0';}else if (bit[i]=='0'&&temp==1){final[i]='1';temp = 0;}}final[strlen(bit)]='\0';if(temp=1) result += final;else result = final;return result;}};


为了解决这一问题,我采用遍历字符串然后相加的方式,通过代码如下,感觉上挺烂的,以后会再思考优化方式

class Solution {public:    string addBinary(string a, string b) {        int big_len,small_len,i=0,j=0,temp=0;string result="1",big,small;char bit[200];char final[200];        if (a.length()>=b.length()){big = a;small = b;big_len = a.length();small_len = b.length();}else{big = b;small = a;big_len = b.length();small_len = a.length();}for(i=big_len-small_len;i<big_len;i++){    bit[i]=big[i]+small[j++]-48;}for(i=0;i<big_len-small_len;i++){    bit[i]=big[i];}bit[big_len]='\0';for(i=strlen(bit)-1;i>=0;i--){if (bit[i]=='2'&&temp==0) {final[i]='0';temp = 1;}else if (bit[i]=='2'&&temp==1) {final[i]='1';}else if (bit[i]=='1'&&temp==1) {final[i]='0';}else if (bit[i]=='1'&&temp==0){final[i]='1';}else if (bit[i]=='0'&&temp==0){final[i]='0';}else if (bit[i]=='0'&&temp==1){final[i]='1';temp = 0;}}final[strlen(bit)]='\0';if(temp==1) result += final;else result = final;return result;}};




0 0