LeetCode(65)Add Binary
2014-01-23 03:55
375 查看
题目如下:
Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100".
分析如下:
按照从低位到高位的顺序逐个处理每个数字,分别看是0+0,还是0+1, 还是1+0,还是1+1,再看有没有前一次运算的进位。比较容易出bug的地方是,进位要记得更新。
我的代码:
update: 2014-12-10
简化了代码。思路和Leetcoe 这道题目 Add Two Numbers一模一样.
Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100".
分析如下:
按照从低位到高位的顺序逐个处理每个数字,分别看是0+0,还是0+1, 还是1+0,还是1+1,再看有没有前一次运算的进位。比较容易出bug的地方是,进位要记得更新。
我的代码:
//44ms class Solution { public: string addBinary(string a, string b) { int len_a=(int)a.size(); int len_b=(int)b.size(); if(len_a==0&&len_b==0) return "0"; string added="0"; string res=""; len_a--; len_b--; while((len_a>=0)&&(len_b>=0)){ if(((a[len_a]-'0')==0)&&((b[len_b]-'0')==0)){ //bug1 字符串比较写错了,注意a[i]是char型的 if(added=="0") res="0"+res; else{ res="1"+res; added="0"; //bug2 少写了这句话,更新进位变量added的取值 } } else if( ( ( (a[len_a]-'0')==0) && ( (b[len_b]-'1')==0) ) || ( ( (a[len_a]-'1')==0)&&( (b[len_b]-'0')==0 ) ) ) { if(added=="0"){ res="1"+res; }else{ res="0"+res; added="1"; } }else{ if(added=="0"){ res="0"+res; added="1"; } else { res="1"+res; added="1"; } } len_a--; len_b--; } while(len_a>=0){ if(added=="0") res=a[len_a]+res; else{ if((a[len_a]-'0')==0){ res="1"+res; added="0"; //bug3 少写了这句话,更新进位变量added的取值 }else{ res="0"+res; added="1"; } } len_a--; } while(len_b>=0){ if(added=="0") res=b[len_b]+res; else{ if((b[len_b]-'0')==0){ res="1"+res; added="0"; } else { res="0"+res; added="1"; } } len_b--; } if(added=="1") res=added+res; return res; } };
update: 2014-12-10
简化了代码。思路和Leetcoe 这道题目 Add Two Numbers一模一样.
class Solution { public: string addBinary(string a, string b) { int index_a = a.length() - 1; int index_b = b.length() - 1; int rest = 0; int current_int = 0; char current_array[2]; string current_string = ""; string result = ""; while (index_a >= 0 && index_b >=0) { current_int = (a[index_a] - '0' + b[index_b] - '0' + rest) % 2; sprintf(current_array,"%d", current_int); result = string(current_array) + result; rest = (a[index_a] - '0' + b[index_b] - '0' + rest) / 2; index_a--; index_b--; } while (index_a >= 0) { current_int = (a[index_a] - '0' + rest) % 2; sprintf(current_array,"%d", current_int); result = string(current_array) + result; rest = (a[index_a] - '0' + rest) / 2; index_a--; } while (index_b >= 0) { current_int = (b[index_b] - '0' + rest) % 2; sprintf(current_array,"%d", current_int); result = string(current_array) + result; rest = (b[index_b] - '0' + rest) / 2; index_b--; } if (rest != 0){ sprintf(current_array,"%d", rest); result = string(current_array) + result; } return result; } };
相关文章推荐
- LeetCode 65 Add Binary
- LeetCode 067 Add Binary
- leetcode -- 67. Add Binary【统一形式简化代码+双指针 + 二进制规则 + 字符数字转换】
- Add Binary - LeetCode
- leetcode解题报告(26):Add Binary
- [leetcode] Add Binary
- [leetcode] Add Binary
- [LeetCode]Add Binary
- LeetCode 67. Add Binary
- [LeetCode 65] Valid Number Solution
- LeetCode(56)-Add Binary
- LeetCode-67-Add Binary(二进制相加)
- leetcode | Add Binary
- leetcode_question_67 Add Binary
- leetcode 65: Valid Number
- Add Binary----LeetCode
- LeetCode Add Binary |My Solution
- [LeetCode] Add Binary
- [Leetcode]Add Binary
- 【Leetcode】Add Binary