/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 计算两个数之和
 * @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('')
}

一站式解决前端面试高频算法题

https://github.com/hovinghuang/fe-agorithm-interview