每天一道LeetCode-----字符串乘法
原題鏈接Multiply Strings
意思是給兩個字符串,代表兩個整數(shù),求這兩個整數(shù)的積,以字符串的形式返回
主要注意的地方在這兩個字符串可能很長,遠(yuǎn)遠(yuǎn)超過了long long int所表示的范圍,所以當(dāng)初耍小聰明直接用std::stringstream獲取兩個整數(shù)再相乘就果斷的溢出了
所以這種問題還是實打?qū)嵉挠米址嬎惚容^好,當(dāng)然需要點(diǎn)技巧,算法題很少用蠻力法硬算的…
首先還是找規(guī)律,對于字符串1的某一位乘字符串2的某一位,乘積的結(jié)果在整個結(jié)果的哪一位呢,能不能找到某種規(guī)律直接定位,這樣就簡單多了。
先看一下乘法運(yùn)算
上式中直接用下標(biāo)代表對應(yīng)位的值,乘號左邊代表num1的值,右邊代表num2的值,比如0 * 1代表num1[0] * num2[1]
注意這里,0*0中0+0=0,正好是結(jié)果的第0位,0*1中0+1=1,1*0中1+0=1剛好是結(jié)果的第1位
所以根據(jù)下標(biāo)很容易定位到結(jié)果的位置
又因為0*0可能會進(jìn)位,所以在結(jié)果中每一位都后移一位,即0*0是第1位….,第0位用來存最后的進(jìn)位
這樣代碼就容易寫出了
總結(jié)
以上是生活随笔為你收集整理的每天一道LeetCode-----字符串乘法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 每天一道LeetCode-----给定序
- 下一篇: 每天一道LeetCode-----最长无