国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python leetcode 字符串相乘實例詳解

2020-02-15 22:53:17
字體:
來源:轉載
供稿:網友

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

示例 1:

輸入: num1 = "2", num2 = "3"

輸出: "6"

示例 2:

輸入: num1 = "123", num2 = "456"

輸出: "56088"

說明:

    num1  和  num2  的長度小于110。 num1  和  num2  只包含數字  0-9 。 num1  和  num2  均不以零開頭,除非是數字 0 本身。

不能使用任何標準庫的大數類型(比如 BigInteger)或直接將輸入轉換為整數來處理。

從題目要求來看,應該是讓我們實現一個比較省內存的大數乘法,先分享幾個我在discuss中發現的不太切合題意的解法:

class Solution:  def multiply(self, num1, num2):    """    :type num1: str    :type num2: str    :rtype: str    """    return str(eval(num1+'*'+num2))

這個可以說是個毫無技術含量的解法,如果面試的時候掏出這種解法,八成是跪了。

還有很多人使用了以下的解法。

class Solution:  def multiply(self, num1, num2):    """    :type num1: str    :type num2: str    :rtype: str    """    dict = {'0':0, '1':1, '2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9}    if (num1=='0' or num2=='0'):      return "0"    n1 = 0    n2 = 0    for c in num1:      val = dict[c]      n1 = n1*10 + val    for s in num2:      val = dict[s]      n2 = n2*10 + val    result = n1 * n2;    return str(result)

這種解法我覺得還是沒有切合題意,將注意力放在的字符串轉數字上,乘法還是使用的*。題目要求不能將輸入直接轉成數字類型,解體人自己實現了int方法完成了字符串的轉換,好像是符合要求,但有投機取巧的感覺。

我來分享一下我的解法,思路很簡單也很好理解,當我們徒手計算222*11時我們怎么計算呢,肯定是分解成222+2220來計算的,那么我們就可以使用一個一維列表來記錄計算結果11分解成10+1,第一輪計算列表的結果為[0, 2, 2, 2],第二輪計算后變為[2, 2+2, 2+2, 2]計算結束。如果需要進位的話,進位的計算放到最后一步。

class Solution(object):  def multiply(self, num1, num2):    """    :type num1: str    :type num2: str    :rtype: str    """    if num1 == "0" or num2 == "0":      return "0"    num1 = num1[::-1]    num2 = num2[::-1]    str_list = [0 for _ in range(len(num1)+len(num2))]    for i in range(len(num1)):      for j in range(len(num2)):        str_list[i+j] += (int(num1[i])*int(num2[j]))    result = ""    up = 0    for i in str_list:      now = i + up      cur = now % 10      up = now / 10      result += str(cur)    begin = 0    result = result[::-1]    for i in result:      if i == "0":        begin += 1      else:        break    return result[begin:]            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平潭县| 博爱县| 金阳县| 容城县| 石渠县| 崇左市| 西乡县| 同江市| 奇台县| 永福县| 宣武区| 靖西县| 团风县| 西充县| 卢湾区| 珲春市| 太仆寺旗| 宁夏| 南华县| 怀来县| 宝丰县| 芦山县| 宜宾县| 即墨市| 舟山市| 新绛县| 汾西县| 屏东县| 柏乡县| 广安市| 特克斯县| 万荣县| 蓝山县| 陵川县| 晋江市| 岳池县| 崇义县| 东乡县| SHOW| 大关县| 湘潭县|