class Solution {
public:
string addStrings(string num1, string num2) {
//两个索引
int len1 = num1.size() - 1;
int len2 = num2.size() - 1;
int step = 0; //进位信息
int curnum = 0; //当前位的数值
string ret; //保存结果
//优化: 用reverse提前开好空间, 避免之后位数不够重新开空间和拷贝
int len = len1 > len2 ? len1 + 1 : len2 + 1;
ret.reserve(len);
//遍历所有位, 从个位开始相加, 依次向高位
while(len1 >= 0 || len2 >= 0) {
//先加上上一位的进位
curnum = step;
if(len1 >= 0) {
//num1还没遍历完
curnum += num1[len1] - '0';
--len1;
}
if(len2 >= 0) {
//num2还没遍历完
curnum += num2[len2] - '0';
--len2;
}
//判断是否有进位
if(curnum >= 10) {
curnum -= 10;
step = 1;
}
else {
//没有进位
step = 0;
}
//先逆置保存
ret.push_back(curnum + '0');
}
//循环结束后, 判断最高位是否有进位
if(step == 1) {
//有进位, 给最高位进位
ret.push_back(step + '0');
}
//逆置, 得到正确顺序的结果
reverse(ret.begin(), ret.end());
return ret;
}
};
OJ ---- LeetCode 415: 字符串相加
最新推荐文章于 2021-06-03 19:44:42 发布