一,知识点
1. 字符串中insert函数的使用(具体看这篇博客☞《从零开始实现 std::string:让你更深入地了解字符串的本质》)
2.进阶相关题(《leetcode43. 字符串相乘》)
二, 题目(简单)
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。
你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。
示例 1:
输入:num1 = "11", num2 = "123"
输出:"134"
示例 2:
输入:num1 = "456", num2 = "77"
输出:"533"
示例 3:
输入:num1 = "0", num2 = "0"
输出:"0"
提示:
1 <= num1.length, num2.length <= 104
num1 和num2 都只包含数字 0-9
num1 和num2 都不包含任何前导零
三,思路
思考一下平时两个数是怎么相加的?
从低位向高位逐位相加,余数放在原位,将进位另外保留
如果另一个数的位数不够,就只需要将多的位数上的数加上进位的数即可
注意字符转换为数字的处理
四,AC代码
class Solution { public: string addStrings(string num1, string num2) { int i = num1.size() - 1; int j = num2.size() - 1; int carry = 0; string res; while (i >= 0 || j >= 0 || carry != 0) { int n1 = 0, n2 = 0; if (i >= 0) n1 = num1[i--] - '0'; if (j >= 0) n2 = num2[j--] - '0'; int sum = n1 + n2 + carry; carry = sum / 10; res.insert(0, 1, '0' + sum % 10); } return res; } };
五,小结
这题是字符串的加法运算,看起来十分简单,但是关于这种字符串的题很容易一看就会,一写就废,很多你意想不到的条件需要斟酌、优化。唯一的方式就是保持刷题,保持手感。