思路
- 模拟运算
从个位开始,逐渐往上累加,换到字符串中就是从两个字符串的末尾开始相加,从后往前遍历长度长的那个字符串,下标为i
短字符串的下标j=i-len(长度长的字符串)+len(长度短的字符串)
注意:进位标志carry=tmp//10, tmp=tmp%10
若循环结束后,carry==1,把1加到字符串前
时间复杂度:O(n),其中n为较长字符的长度,遍历字符串
空间复杂度:O(1),常数级空间,没有使用额外辅助空间
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 计算两个数之和
# @param s string字符串 表示第一个整数
# @param t string字符串 表示第二个整数
# @return string字符串
#
class Solution:
def solve(self , s: str, t: str) -> str:
# write code here
if len(s)==0:
return t
if len(t)==0:
return s
#让s为较长的,t为较短的
if len(s)<len(t):
temp=t
t=s
s=temp
#进位标志
carry=0
i=len(s)-1
while i>=0:
#转数字加进位
tmp=int(s[i])+carry
#较短字符串相应从后往前的下标
j=i-len(s)+len(t)
if j>=0:
tmp=tmp+int(t[j])
#取进位
carry=tmp//10
#取余
tmp=tmp%10
s=s[:i]+str(tmp)+s[i+1:]
i-=1
#最后的进位
if carry==1:
s='1'+s
return s