9/12力扣刷题笔记-动态规划, 二进制求和, 图

动态规划法,时间和空间复杂度均为O(n)
此方法超出时间限制。
用滚动数组思想,把空间复杂度优化成O(1)

官方题解的方法2,3没看。

class Solution {
public:
string addBinary(string a, string b) {
int len_a = a.length();
int len_b = b.length();
string ans;
int help = 0;
int i, j, k;
for(i = len_a - 1, j = len_b - 1; i >= 0 && j >= 0; i--, j--){
k = (a[i] -'0') + (b[j] - '0') + help;
if(k == 3){
ans += '1';
help = 1;
}else if(k == 2){
ans += '0';
help = 1;
}else if(k == 1){
ans += '1';
help = 0;
}else{//0
ans += '0';
help = 0;
}
}
while(i >= 0 || j >= 0){
if(i >= 0){
k = (a[i] - '0') + help;
}
else{
k = (b[j] - '0') + help;
}
if(k == 2){
ans += '0';
help = 1;
}else if(k == 1){
ans += '1';
help = 0;
}else{
if(i >= 0){
ans += a[i];
}else if(j >= 0){
ans += b[j];
}
}
i--, j--;
}
if(help == 1){
ans += '1';
}
string ture_ans;
for(int i = ans.length()-1; i >= 0; i--){
ture_ans += ans[i];
}
return ture_ans;
}
};
这题要注意的是:(int)ans[i] = (int)('1')的结果是49,字符1的ASCII码值。要想取这个字符1转换为数字1,应该写成('1' - '0').
如下为官方解答,很有水平。




浙公网安备 33010602011771号