python leetcode 字符串相乘实例详解

 更新时间:2018年09月03日 08:37:07   作者:熔遁丶螺旋手里剑  
这篇文章主要介绍了python leetcode 字符串相乘的示例代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

给定两个以字符串形式表示的非负整数 num1 和  num2 ,返回  num1 和  num2 的乘积,它们的乘积也表示为字符串形式。

示例 1:

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

输出: "6"

示例 2:

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

输出: "56088"

说明:

  1. num1  和  num2  的长度小于110。
  2. num1  和  num2  只包含数字  0-9 。
  3. 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:]

相关文章

  • Python 获取windows桌面路径的5种方法小结

    Python 获取windows桌面路径的5种方法小结

    今天小编就为大家分享一篇Python 获取windows桌面路径的5种方法小结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python读取文件的8种常用方式

    Python读取文件的8种常用方式

    这篇文章主要给大家介绍了关于Python读取文件的8种常用方式,在编程语言中,文件读写是最常见的IO操作,文中通过代码示例介绍的非常详细,需要的朋友可以参考下
    2023-09-09
  • pycharm安装图文教程

    pycharm安装图文教程

    这篇文章主要为大家详细介绍了pycharm安装图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • python3库numpy数组属性的查看方法

    python3库numpy数组属性的查看方法

    下面小编就为大家分享一篇python3库numpy数组属性的查看方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • python pandas 对时间序列文件处理的实例

    python pandas 对时间序列文件处理的实例

    今天小编就为大家分享一篇python pandas 对时间序列文件处理的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Python Property属性的2种用法

    Python Property属性的2种用法

    这篇文章主要介绍了Python Property属性的2种用法,本文分别给出了两种用法的代码实例,需要的朋友可以参考下
    2015-06-06
  • python设置环境变量的作用和实例

    python设置环境变量的作用和实例

    在本篇文章里小编给各位整理了关于python设置环境变量的作用和实例内容知识点,需要的朋友们学习参考下。
    2019-07-07
  • Flask框架重定向,错误显示,Responses响应及Sessions会话操作示例

    Flask框架重定向,错误显示,Responses响应及Sessions会话操作示例

    这篇文章主要介绍了Flask框架重定向,错误显示,Responses响应及Sessions会话操作,结合实例形式分析了flask框架中重定向,错误显示,Responses响应及Sessions会话操作相关使用技巧与操作注意事项,需要的朋友可以参考下
    2019-08-08
  • Java中重定向输出流实现用文件记录程序日志

    Java中重定向输出流实现用文件记录程序日志

    这篇文章主要介绍了Java中重定向输出流实现用文件记录程序日志,本文直接给出代码实例,并对代码做了详细注解,需要的朋友可以参考下
    2015-06-06
  • python中reader的next用法

    python中reader的next用法

    这篇文章主要介绍了python中reader的next用法,分别介绍了python3中的用法和python2中的用法,具体实例代码大家参考下本文
    2018-07-07

最新评论