python leetcode 字符串相乘实例详解


Posted in Python onSeptember 03, 2018

给定两个以字符串形式表示的非负整数 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 相关文章推荐
利用Python实现Windows下的鼠标键盘模拟的实例代码
Jul 13 Python
Python import与from import使用及区别介绍
Sep 06 Python
深入理解Python中的 __new__ 和 __init__及区别介绍
Sep 17 Python
python实现图片筛选程序
Oct 24 Python
python redis 删除key脚本的实例
Feb 19 Python
python中的协程深入理解
Jun 10 Python
Python OpenCV之图片缩放的实现(cv2.resize)
Jun 28 Python
深入了解Python枚举类型的相关知识
Jul 09 Python
PyCharm中代码字体大小调整方法
Jul 29 Python
pytorch 获取tensor维度信息示例
Jan 03 Python
Python机器学习之基于Pytorch实现猫狗分类
Jun 08 Python
Python面向对象之内置函数相关知识总结
Jun 24 Python
Python模拟自动存取款机的查询、存取款、修改密码等操作
Sep 02 #Python
Python实现多级目录压缩与解压文件的方法
Sep 01 #Python
Python实现压缩文件夹与解压缩zip文件的方法
Sep 01 #Python
Python pymongo模块常用操作分析
Sep 01 #Python
Python实现提取XML内容并保存到Excel中的方法
Sep 01 #Python
python使用webdriver爬取微信公众号
Aug 31 #Python
python爬取微信公众号文章
Aug 31 #Python
You might like
php中get_meta_tags()、CURL与user-agent用法分析
2014/12/16 PHP
PHP创建/删除/复制文件夹、文件
2016/05/03 PHP
PHP线程的内存回收问题
2016/07/08 PHP
Yii基于CActiveForm的Ajax数据验证用法示例
2016/07/14 PHP
浅谈PHP的exec()函数无返回值排查方法(必看)
2017/03/31 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
使用 Node.js 做 Function Test实现方法
2013/10/25 Javascript
javascript原生和jquery库实现iframe自适应高度和宽度
2014/07/18 Javascript
node.js中使用q.js实现api的promise化
2014/09/17 Javascript
Angular.js与Bootstrap相结合实现表格分页代码
2016/04/12 Javascript
D3.js实现柱状图的方法详解
2016/09/21 Javascript
javascript中递归的两种写法
2017/01/17 Javascript
BootStrap注意事项小结(五)表单
2017/03/10 Javascript
解决Js先触发失去焦点事件再执行点击事件的问题
2018/08/30 Javascript
使用nodejs分离html文件里的js和css详解
2019/04/12 NodeJs
JavaScript实现多个物体同时运动
2020/03/12 Javascript
为react组件库添加typescript类型提示的方法
2020/06/15 Javascript
原生js实现弹幕效果
2020/11/29 Javascript
python创建列表并给列表赋初始值的方法
2015/07/28 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
2018/01/20 Python
python清除字符串中间空格的实例讲解
2018/05/11 Python
python删除文本中行数标签的方法
2018/05/31 Python
Python面向对象程序设计类的多态用法详解
2019/04/12 Python
Django自定义用户登录认证示例代码
2019/06/30 Python
Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例
2020/03/04 Python
MxNet预训练模型到Pytorch模型的转换方式
2020/05/25 Python
前端面试必备之CSS3的新特性
2017/09/05 HTML / CSS
铁路个人事迹材料
2014/01/30 职场文书
开展批评与自我批评发言材料
2014/05/15 职场文书
职业规划实施方案
2014/06/10 职场文书
2014年驻村干部工作总结
2014/11/17 职场文书
2014年学生资助工作总结
2014/12/18 职场文书
2015年度团总支工作总结
2015/04/23 职场文书
增值税发票丢失证明
2015/06/19 职场文书
2016年教师新年寄语
2015/08/18 职场文书
如何制定一份可行的计划!
2019/06/21 职场文书