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字符串的encode与decode研究心得乱码问题解决方法
Mar 23 Python
python实现倒计时的示例
Feb 14 Python
使用Python的Flask框架实现视频的流媒体传输
Mar 31 Python
python3实现短网址和数字相互转换的方法
Apr 28 Python
编写Python爬虫抓取暴走漫画上gif图片的实例分享
Apr 20 Python
Python的Django应用程序解决AJAX跨域访问问题的方法
May 31 Python
python 禁止函数修改列表的实现方法
Aug 03 Python
在CentOS6上安装Python2.7的解决方法
Jan 09 Python
Python OpenCV实现鼠标画框效果
Aug 19 Python
Python hashlib模块实例使用详解
Dec 24 Python
Python写捕鱼达人的游戏实现
Mar 31 Python
pytorch 6 batch_train 批训练操作
May 28 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
JavaScript创建命名空间的5种写法
2014/06/24 PHP
php中的观察者模式简单实例
2015/01/20 PHP
php根据年月获取当月天数及日期数组的方法
2016/11/30 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
如何在Web页面上直接打开、编辑、创建Office文档
2007/03/12 Javascript
jQuery 剧场版 你必须知道的javascript
2009/05/27 Javascript
asp.net网站开发中用jquery实现滚动浏览器滚动条加载数据(类似于腾讯微博)
2012/03/14 Javascript
jQuery Animation实现CSS3动画示例介绍
2013/08/14 Javascript
扩展IE中一些不兼容的方法如contains、startWith等等
2014/01/09 Javascript
node.js中的fs.unlink方法使用说明
2014/12/15 Javascript
JS上传图片前实现图片预览效果的方法
2015/03/02 Javascript
Javascript对象Clone实例分析
2015/06/09 Javascript
jQuery树形下拉菜单特效代码分享
2015/08/15 Javascript
JavaScript函数学习总结以及相关的编程习惯指南
2015/11/16 Javascript
js实现微信分享代码
2020/10/11 Javascript
JavaScipt选取文档元素的方法(推荐)
2016/08/05 Javascript
jquery实现(textarea)placeholder自动换行
2016/12/22 Javascript
nodejs个人博客开发第二步 入口文件
2017/04/12 NodeJs
浅谈HTTP 缓存的那些事儿
2018/10/17 Javascript
微信小程序开发常见问题及解决方案
2019/07/11 Javascript
Vue项目中数据的深度监听或对象属性的监听实例
2020/07/17 Javascript
[02:27]DOTA2英雄基础教程 莱恩
2014/01/17 DOTA
跟老齐学Python之玩转字符串(3)
2014/09/14 Python
使用Python3 编写简单信用卡管理程序
2016/12/21 Python
python中如何使用朴素贝叶斯算法
2017/04/06 Python
Python中if elif else及缩进的使用简述
2018/05/31 Python
Python 给下载文件显示进度条和下载时间的实现
2020/04/02 Python
HTML5 b和i标记将被赋予真正的语义
2009/07/16 HTML / CSS
HTML5 canvas基本绘图之图形组合
2016/06/27 HTML / CSS
eBay意大利购物网站:eBay.it
2019/09/04 全球购物
工程总经理工作职责
2013/12/09 职场文书
个人委托书
2014/07/31 职场文书
乡镇精神文明建设汇报材料
2014/08/15 职场文书
2014年幼儿园后勤工作总结
2014/11/10 职场文书
给女朋友道歉的话大全
2015/01/20 职场文书
2015年班组工作总结
2015/04/20 职场文书