/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 计算两个数之和
* @param s string字符串 表示第一个整数
* @param t string字符串 表示第二个整数
* @return string字符串
*/
/**
* 解法一:模拟法(双尾指针法)
* 思路:模拟我们日常加法进位过程,详细过程看代码
* 时间复杂度:O(n),其中 n 为较长字符的长度,遍历字符串
* 空间复杂度:O(1),常数级空间
*/
export function solve(s: string, t: string): string {
if (s.length === 0) return t
if (t.length === 0) return s
const res: string[] = []
let plus = 0
let i = s.length - 1 // i 指向s尾部
let j = t.length - 1 // j 指向t尾部
while (i >= 0 || j >= 0 || plus !== 0) {
const sVal = (i >= 0 ? parseInt(s[i]) : 0)
const tVal = (j >= 0 ? parseInt(t[j]) : 0)
const sum = sVal + tVal + plus
const cur = sum % 10 // 计算当前位(求余)
res.unshift(cur + '') // 将数字转字符串插入res头部
plus = (sum >= 10 ? 1 : 0) // 暂存进位,下次循环用到
i--
j--
}
return res.join('')
}
一站式解决前端面试高频算法题