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自动化测试之连接几组测试包实例
Sep 28 Python
深入理解python函数递归和生成器
Jun 06 Python
TF-IDF与余弦相似性的应用(一) 自动提取关键词
Dec 21 Python
Python实现PS滤镜功能之波浪特效示例
Jan 26 Python
python2 与 pyhton3的输入语句写法小结
Sep 10 Python
Django model反向关联名称的方法
Dec 15 Python
Pytorch GPU显存充足却显示out of memory的解决方式
Jan 13 Python
Python线程协作threading.Condition实现过程解析
Mar 12 Python
使用Python实现将多表分批次从数据库导出到Excel
May 15 Python
django中related_name的用法说明
May 20 Python
python中requests库+xpath+lxml简单使用
Apr 29 Python
Python自动化工具之实现Excel转Markdown表格
Apr 08 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
给海燕B411配件机起死回生配上件
2021/03/02 无线电
PHP中for与foreach的区别分析
2011/03/09 PHP
浅析Yii中使用RBAC的完全指南(用户角色权限控制)
2013/06/20 PHP
php分页函数示例代码分享
2014/02/24 PHP
PHP函数积累总结
2019/03/19 PHP
PHP快速导出百万级数据到CSV或者EXCEL文件
2020/11/27 PHP
用javascript实现的激活输入框后隐藏初始内容
2007/06/29 Javascript
document.documentElement && document.documentElement.scrollTop
2007/12/01 Javascript
11款基于Javascript的文件管理器
2009/10/25 Javascript
禁用JavaScript控制台调试的方法
2014/03/07 Javascript
js根据鼠标移动速度背景图片自动旋转的方法
2015/02/28 Javascript
完美解决jQuery 鼠标快速滑过后,会执行多次滑出的问题
2016/12/08 Javascript
详解JS中的快速排序与冒泡
2017/01/10 Javascript
深入理解javascript中的 “this”
2017/01/17 Javascript
老生常谈jquery中detach()和remove()的区别
2017/03/02 Javascript
JS实现select选中option触发事件操作示例
2018/07/13 Javascript
详解Node.js中path模块的resolve()和join()方法的区别
2018/10/29 Javascript
小程序rich-text组件如何改变内部img图片样式的方法
2019/05/22 Javascript
vue使用微信JS-SDK实现分享功能
2019/08/23 Javascript
mpvue 项目初始化及实现授权登录的实现方法
2020/07/20 Javascript
vue 根据选择的月份动态展示日期对应的星期几
2021/02/06 Vue.js
Python迭代和迭代器详解
2016/11/10 Python
浅谈Python中的可变对象和不可变对象
2017/07/07 Python
利用django-suit模板添加自定义的菜单、页面及设置访问权限
2018/07/13 Python
Python使用requests提交HTTP表单的方法
2018/12/26 Python
Tensorflow--取tensorf指定列的操作方式
2020/06/30 Python
python3判断IP地址的方法
2021/03/04 Python
魅力惠奢品线上平台:MEI.COM
2016/11/29 全球购物
毕业求职自荐信格式是什么
2013/11/19 职场文书
大学生求职自我评价
2014/01/16 职场文书
全陪导游欢迎词
2014/01/17 职场文书
领导干部民主生活会自我剖析材料范文
2014/09/20 职场文书
2014年安全管理工作总结
2014/12/01 职场文书
《雷雨》教学反思
2016/02/20 职场文书
Python的property属性详细讲解
2022/04/11 Python
JS精髓原型链继承及构造函数继承问题纠正
2022/06/16 Javascript