算法题-字符串3.20

wric

字符串相加

题目
image.png

官解-常规解法

func addStrings(num1 string, num2 string) string {
    add := 0
    ans := ""
    for i, j := len(num1) - 1, len(num2) - 1; i >= 0 || j >= 0 || add != 0; i, j = i - 1, j - 1 {
        var x, y int
        if i >= 0 {
            x = int(num1[i] - '0')
        }
        if j >= 0 {
            y = int(num2[j] - '0')
        }
        result := x + y + add
        ans = strconv.Itoa(result%10) + ans
        add = result / 10
    }
    return ans
}

作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/add-strings/solution/zi-fu-chuan-xiang-jia-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

效果
image.png

字符数组构造字符串

func addStrings(num1 string, num2 string) string {
l1 := len(num1)
l2 := len(num2)

l := l1
if l < l2 {
    l = l2
}

add := 0
r := make([]byte, l+1, l+1)
for i := l - 1; i >= 0; i-- {
    i1 := i - (l - l1)
    i2 := i - (l - l2)
    a := 0
    b := 0
    if i1 >= 0 {
        a = int(num1[i1] - '0')
    }
    if i2 >= 0 {
        b = int(num2[i2] - '0')
    }
    r[i+1] = byte(((a+b+add) % 10) + '0')
    add = (a+b+add) / 10
}
if add == 0 {
    return string(r[1:])
}
r[0] = '1'
return string(r)
}

作者:import-7e
链接:https://leetcode-cn.com/problems/add-strings/solution/100-by-import-7e-esby/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

效果
image.png

//稍微有点取巧
附上两篇对字符串拼接有参考价值的博客
https://www.jianshu.com/p/7cc...
https://hermanschaaf.com/effi...

字符串相乘

image.png
取出字符分别相乘
建一个int数组,按权值存储每次相乘的结果
再将其转换为字符串

func multiply(num1 string, num2 string) string {
    if num1 == "0" || num2 == "0" {
        return "0"
    }
    m, n := len(num1), len(num2)
    ansArr := make([]int, m + n)
    for i := m - 1; i >= 0; i-- {
        x := int(num1[i]) - '0'
        for j := n - 1; j >= 0; j-- {
            y := int(num2[j] - '0')
            ansArr[i + j + 1] += x * y
        }
    }
    for i := m + n - 1; i > 0; i-- {
        ansArr[i - 1] += ansArr[i] / 10
        ansArr[i] %= 10
    }
    ans := ""
    idx := 0
    if ansArr[0] == 0 {
        idx = 1
    }
    for ; idx < m + n; idx++ {
        ans += strconv.Itoa(ansArr[idx])
    }
    return ans
}

效果
image.png

阅读 391
10 声望
3 粉丝
0 条评论
10 声望
3 粉丝
文章目录
宣传栏