当前位置:网站首页>【415. 字符串相加】
【415. 字符串相加】
2022-08-11 07:13:00 【安河桥畔】
字符串相加
题目来源
力扣(LeetCode):字符串相加
题目描述
给定两个字符串形式的非负整数 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 都不包含任何前导零
思路分析
- 运用列竖式计算的思想进行字符串相加
- 找出两个字符串中较长的,作为左操作数
- 定义一个给比较长的字符串长一个单位的字符串保存相加的结果,将这个字符串初始化为全’0’
- 对于数字字符的加法,因为数字的ASCII值都是连续的,所以将其中一个字符转化为数字即可,最终得到的结果仍为char类型,如’4’+3=‘7’。如果将所有字符都转换成int类型计算,最终还是要转换回char类型保存在字符串中
- 按位相加,有进位则给高位加1
- 最终得到的结果判断最高位为’0’,则删除最高位
代码展示
class Solution {
public:
string addStrings(string num1, string num2) {
//较长的数作作操作数
if (num1.size() < num2.size())
{
num1.swap(num2);
}
int LeftSize = num1.size();
int RightSize = num2.size();
int RetSize = LeftSize + 1;
string ret(RetSize, '0');//保存结果
for (int i = LeftSize - 1; i >= 0; i--)
{
ret[i + 1] += (num1[i] - '0');
//注意这里是判断RightSize - 1 >= 0,而不是RightSize>= 0
if (RightSize - 1 >= 0)
{
ret[i + 1] += num2[RightSize - 1] - '0';
}
//如果有进位,当前位-10,高位加1
if (ret[i + 1] > '9')
{
ret[i + 1] -= 10;
ret[i] += 1;
}
RightSize--;
}
if (ret[0] == '0')
{
ret.erase(0, 1);
}
return ret;
}
};
int main()
{
system("pause");
return 0;
}
总结
erase()的用法
边栏推荐
猜你喜欢
随机推荐
Activity的四种启动模式
Unity开发者必备的C#脚本技巧
3.2-分类-Logistic回归
oracle19c不支持实时同步参数,请教一下大佬们有什么好的解决办法吗?
Four startup modes of Activity
1.2 - error sources
js判断图片是否存在
2022-08-10 mysql/stonedb-慢SQL-Q16-耗时追踪
CIKM 2022 AnalytiCup Competition: 联邦异质任务学习
Activity的四种状态
关于Excel实现分组求和最全文档
1061 True or False (15 points)
易观分析联合中小银行联盟发布海南数字经济指数,敬请期待!
TF中的四则运算
年薪40W测试工程师成长之路,你在哪个阶段?
经典论文-MobileNet V1论文及实践
tf.cast(), reduce_min(), reduce_max()
伦敦银规则有哪些?
TF generates (feature, label) set through feature and label, tf.data.Dataset.from_tensor_slices
tf.reduce_mean() and tf.reduce_sum()









