python中字符串乘法_python leetcode 字符串相乘实例详解
给定两个以字符串形式表示的非负整数 num1 和 num2 ,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
示例 1:
输入: num1 = "2", num2 = "3"
输出: "6"
示例 2:
输入: num1 = "123", num2 = "456"
输出: "56088"
说明:
num1 和 num2 的长度小于110。
num1 和 num2 只包含数字 0-9 。
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 leetcode 字符串相乘实例详解
本文地址: http://www.cppcns.com/jiaoben/python/238863.html
python中字符串乘法_python leetcode 字符串相乘实例详解相关推荐
- python url解码_对python中url参数编码与解码的实例详解
一.简介 在python中url,对于中文等非ascii码字符,需要进行参数的编码与解码. 二.关键代码 1.url编码 对字符串编码用urllib.parse包下的quote(string, saf ...
- python 正则式替换_python 正则表达式参数替换实例详解
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. re 模块使 Python ...
- python多进程应用场景_python使用多进程的实例详解
python多线程适合IO密集型场景,而在CPU密集型场景,并不能充分利用多核CPU,而协程本质基于线程,同样不能充分发挥多核的优势. 针对计算密集型场景需要使用多进程,python的multipro ...
- python的scatter函数_python scatter函数用法实例详解
这篇文章主要介绍了python scatter函数用法实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 函数功能:寻找变量之间的关系. 调用签 ...
- Python中各种下划线使用总结和实例详解
Python中经常出现各种单下划线,双下划线,而且有的在前有的在后,有的是约定俗成的用法,有的则会强制对外隐藏.这一篇我们就一起来把各种下划线的用法说清楚. 我是T型人小付,一位坚持终身学习的互联网从 ...
- python中bytearray函数_python函数之bytearray用法详解
bytearray([source [, encoding [, errors]]]) 中文说明: bytearray([source [, encoding [, errors]]])返回一个byt ...
- python中dir用法_Python内置函数dir详解
1.命令介绍 最近学习并使用了一个python的内置函数dir,首先help一下: >>> help(dir) Help on built-in function dir in mo ...
- python中range 函数_Python range()函数用法图文详解
python内置range()函数的作用是什么?它能返回一系列连续增加的整数,它的工作方式类似于分片,可以生成一个列表对象.range函数大多数时常出现在for循环中,在for循环中可做为索引使用.其 ...
- python中config命令_python的logging.config使用详解
python的log模块是日常使用最多的模块之一, 简单的使用这里就不多说了,见(http://blog.csdn.net/jianhong1990/article/details/17475717 ...
最新文章
- 新款笔记本写代码贼爽,包邮送一台!
- 在TSQL中替换换行符
- 一个有趣的关于flash和多种设备交互等技术应用的演示网站
- LeetCode 2145. 统计隐藏数组数目(前缀和)
- C语言小白——数组与字符串
- OGG迁移大库注意要点之impdp导入产生大量归档
- Java c语言词法,c语言写的Java词法分析
- 通用业务平台设计(一):概览
- include vdimgck.php,织梦后台升级后验证码登录一直显示错误的解决方法
- 计算机及其工作原理ppt,计算机及其工作原理ppt课件
- 网页转化成pdf,网页转换图片,wkhtmltopdf,wkhtmltoimage使用小结
- stm32_电容触摸按键
- EDEM软件简单介绍
- 渐进式Express源码学习2-道士下山
- Ansible主机清单—inventory主机清单
- ios实用wifi分析仪——AirPort
- h5后缀文件python处理
- Yii学习--使用Yii来建立博客
- 逻辑回归-关于WOE和IV的一些理解
- 监听元素宽高变化resize
热门文章
- python输出结果空格分割_用Python编写固定宽度,以空格分隔的CSV输出
- 关于压缩工具 7z(7-zip) 如何设置压缩算法(选项 -m 的解读)
- 只做macd二次金叉_【教你一招】MACD低位二次金叉
- 计算机组装与维修单招,单招职二 计算机组装与维修试卷.doc
- 百度地图android绘图类,Class:android总类/android离线地图类
- 用access建立一个试题库_Access考试题库(含答案).doc
- php云服务器买什么系统吗,php云服务器买什么系统
- java string args_java – 语法“final String … args”是什么意思/做什么?
- C/C 输入输出缓冲区
- 计算机主机箱外部介绍图,电脑的主机结构是怎样的 电脑主机结构图【图文】...