leetcode 67. 二进制求和
2020-06-24 01:08 woshihuangrulin 阅读(91) 评论(0) 收藏 举报这道题目和十进制题目很类似,但是在做的时候发现对string的用法不熟悉,首先是reverse,这个是对vector和string都起作用的std 函数,可以将对象反序,其次是在string中增加元素,使用的是push_back(),在写的时候对string取元素的方法也是印象模糊,后面尽量写一篇对string用法的文章增加记忆;
刚开始是想转换成int类型后计算,但是发现很繁琐,还是用字符吧,给出了一个笨办法:
class Solution {
public:
string addBinary(string a, string b) {
if (a.length() == 0) {
return b;
}
if (b.length() == 0) {
return b;
}
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
char carry = '0';
int a_index = 0;
int b_index = 0;
string result;
while (a_index < a.length() || b_index < b.length()) {
if (a_index < a.length() && b_index < b.length()) {
if (a[a_index] == '1' && b[b_index] == '1') {
if (carry == '1') {
result.push_back('1');
}
else {
result.push_back('0');
carry = '1';
}
}
else if (a[a_index] == '0' && b[b_index] == '0') {
if (carry == '1') {
result.push_back('1');
carry = '0';
}
else {
result.push_back('0');
}
}
else {
if (carry == '1') {
result.push_back('0');
}
else {
result.push_back('1');
}
}
}
else {
if (a_index == a.length()) {
if (carry == '1') {
if (b[b_index] == '1') {
result.push_back('0');
}
else {
result.push_back('1');
carry = '0';
}
}
else {
result.push_back(b[b_index]);
}
}
else if (b_index == b.length()){
if (carry == '1') {
if (a[a_index] == '1') {
result.push_back('0');
}
else {
result.push_back('1');
carry = '0';
}
}
else {
result.push_back(a[a_index]);
}
}
}
if (a_index < a.length()) {
a_index++;
}
if (b_index < b.length()) {
b_index++;
}
}
if (carry == '1') {
result.push_back('1');
}
reverse(result.begin(), result.end());
return result;
}
};
后续我再增加新的解法
浙公网安备 33010602011771号