字串相乘

沒有夢想的阿巧發表於2020-10-21

給定兩個以字串形式表示的非負整數 num1num2 ,返回 num1num2 的乘積,它們的乘積也表示為字串形式

示例:

輸入: num1 = "2", num2 = "3"
輸出:“6”

思路

按照平時計算乘法的方式:豎式乘法。 把 num1num2 的每一位都分別相乘,結果儲存在陣列中,然後把乘積相加。 但是在實際的計算中,可以進行優化,在計算每一位的乘積的時候,把上一位的進位也考慮進去,這樣程式碼更優雅一些。

關鍵部分

num1[i] * num2[j] 的結果,本位儲存在 sumArr[i+j+1],進位儲存在 sumArr[i+j], 當計算下一位的時候,把本位的積加上上一位的進位,就能算出當前的本位與進位。重複這一過程,直到兩個字串中每一位都已經相乘過了,陣列中儲存的就是計算結果。

func multiply(num1 string, num2 string) string {
    if num1 == "0" || num2 == "0" {
        return "0"
    }

    sumArr := make([]int, len(num1) + len(num2))

    for i := len(num2)-1; i >= 0; i -- {
        n2 := int(num2[i] - '0')
        for j := len(num1)-1; j >= 0; j -- {
            n1 := int(num1[j] - '0')
            sum := n2 * n1 + sumArr[i+j+1]
            sumArr[i+j+1] = sum % 10
            sumArr[i+j] += sum / 10
        }
    }

    res := ""
    for k, v := range sumArr {
        if k == 0 && v == 0 {
            continue
        }
        res += string(v + '0')
    }
    return res
}

公眾號:沒有夢想的阿巧 後臺回覆 "群聊",一起學習,一起進步

相關文章