415. 字符串相加

113 阅读1分钟

题目:
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。

你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。

 

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/ad… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解法:
注意求余数部分是num = num % 10以及carry要置0


var    m = map[byte]int{
        byte('0'):0,
        byte('1'):1,
        byte('2'):2,
        byte('3'):3,
        byte('4'):4,
        byte('5'):5,
        byte('6'):6,
        byte('7'):7,
        byte('8'):8,
        byte('9'):9,
    }
    
func addStrings(num1 string, num2 string) string {
    l1, l2 := len(num1) - 1, len(num2) - 1
    ans := ""
    carry := 0
    for 0 <= l1 && 0 <= l2 {
        num := m[num1[l1]] + m[num2[l2]] + carry
        if num >= 10 {
            carry = 1
            num = num % 10
        } else {
            carry = 0
        }
        
        ans = fmt.Sprintf("%d", num) + ans
        l1 --
        l2 --
    }
    for 0 <= l1 {
        num := m[num1[l1]]  + carry
        if num >= 10 {
            carry = 1
            num = num % 10
        } else {
            carry = 0
        }
        l1 --    
        ans = fmt.Sprintf("%d", num) + ans   
        
    }
    for 0 <= l2 {
        num := m[num2[l2]]  + carry
        if num >= 10 {
            carry = 1
            num = num % 10
        } else {
            carry = 0
        }
        l2 --
        ans = fmt.Sprintf("%d", num) + ans       
    }
    if carry == 1 {
        ans = fmt.Sprintf("%d", 1) + ans
    }
    return ans
}