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实现发送邮件及附件功能
Mar 02 Python
Python使用matplotlib实现绘制自定义图形功能示例
Jan 18 Python
Python爬虫天气预报实例详解(小白入门)
Jan 24 Python
Python实现matplotlib显示中文的方法详解
Feb 06 Python
关于Numpy中的行向量和列向量详解
Nov 30 Python
python中的split()函数和os.path.split()函数使用详解
Dec 21 Python
浅谈python多线程和多线程变量共享问题介绍
Apr 17 Python
如何将PySpark导入Python的放实现(2种)
Apr 26 Python
Softmax函数原理及Python实现过程解析
May 22 Python
pyMySQL SQL语句传参问题,单个参数或多个参数说明
Jun 06 Python
Appium+Python实现简单的自动化登录测试的实现
Jan 26 Python
python爬虫智能翻页批量下载文件的实例详解
Feb 02 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+AJAX实现无刷新注册(带用户名实时检测)
2007/01/02 PHP
解析PHP可变函数的经典用法
2013/06/20 PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
2015/07/01 PHP
PHP的Yii框架中创建视图和渲染视图的方法详解
2016/03/29 PHP
PHP实现笛卡尔积算法的实例讲解
2019/12/22 PHP
国外Lightbox v2.03.3 最新版 下载
2007/10/17 Javascript
Jquery + Ajax调用webService实例代码(asp.net)
2010/08/27 Javascript
javascript返回顶部效果(自写代码)
2013/01/06 Javascript
javascript中attribute和property的区别详解
2014/06/05 Javascript
JavaScript利用正则表达式去除日期中的-
2014/06/09 Javascript
jQuery中:file选择器用法实例
2015/01/04 Javascript
Javascript中的对象和原型(二)
2016/08/12 Javascript
jQuery Validate插件实现表单验证
2016/08/19 Javascript
简单谈谈原生js的math对象
2017/06/27 Javascript
在ABP框架中使用BootstrapTable组件的方法
2017/07/31 Javascript
让你5分钟掌握9个JavaScript小技巧
2018/06/09 Javascript
解决angularjs前后端分离调用接口传递中文时中文乱码的问题
2018/08/13 Javascript
vue配置文件实现代理v2版本的方法
2019/06/21 Javascript
vue实现百度搜索功能
2020/12/28 Javascript
基于form-data请求格式详解
2019/10/29 Javascript
node省市区三级数据性能测评实例分析
2019/11/06 Javascript
python访问类中docstring注释的实现方法
2015/05/04 Python
Python max内置函数详细介绍
2016/11/17 Python
Python rstrip()方法实例详解
2018/11/11 Python
浅谈Python批处理文件夹中的txt文件
2019/03/11 Python
python+selenium定时爬取丁香园的新型冠状病毒数据并制作出类似的地图(部署到云服务器)
2020/02/09 Python
Python编程快速上手——Excel到CSV的转换程序案例分析
2020/02/28 Python
解决Pycharm 中遇到Unresolved reference 'sklearn'的问题
2020/07/13 Python
BNKR中国官网:带你感受澳洲领先潮流时尚
2018/08/21 全球购物
英国排名第一的餐具品牌:Denby Pottery
2019/11/01 全球购物
高一数学教学反思
2014/02/07 职场文书
剪枝的学问教学反思
2014/02/07 职场文书
签约仪式策划方案
2014/06/02 职场文书
介绍信格式样本
2015/05/05 职场文书
公司规章制度范本
2015/08/03 职场文书
JS精髓原型链继承及构造函数继承问题纠正
2022/06/16 Javascript