首先,要吐槽的是
昨天我的知乎账号被禁了一天
说的是我发布谩骂消息
我也是fuc...了
估计是回复那些詹黑时被举报了
还是要心平静和
跟那些朋友(微笑正脸)讲道理也是没用
省的浪费我口舌了
这两天看了无双这部电影
说实话,还是不错的
虽然中间有些情节有点牵强
但最后那反转还是挺让人惊奇的
推荐推荐
43-字符串相乘
给定两个以字符串形式表示的非负整数 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)或直接将输入转换为整数来处理。
思路:
这一题刚开始看的时候感觉无从下手,因为题目要求4是说:不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理,通俗地讲,就是不能直接将字符串类型转换为整数类型,int()和str()函数都不能用了,这就很蛋疼了。因为题目是要求求两数之积的,我们都知道字符串是不能直接参加四则基本运算的,所以首先肯定得是将两个字符串转化为相应的整数,再将这两个整数相乘得到结果。现在是第一关都过不了,怎么办呢?有什么办法能让整数类型和字符串类型产生联系呢?别急,让我灵光一闪(啊哈哈哈哈哈,其实是我看到网上的提示的)秘诀就是:整数与字符串之间可以通过ASCII码转换。我这么一说是不是感觉到茅塞顿开了?嘿嘿嘿嘿嘿(不知羞耻的嘚瑟一下)这个关键步骤解决了,剩下的就好办了。
代码如下:
class Solution:
# 此题不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。
# 所以我用的方法是把字符转ASCII码方法运算,比如:"1"的ASCII码是49 ASCII码转换为int:ord('A')
# int转为ASCII码:chr(65)
# TypeError: 'int' object is not iterable
def multiply(self, num1, num2):
"""
:type num1: str
:type num2: str
:return: str
"""
# 首先分别得到两个字符串的每个字符,并用列表保存
num1_str_list = list(num1)
num2_str_list = list(num2)
# 这一步是本题的考点了,将每个字符转化成相应的ASCII码,ASCII码是整数类型
num1_int_list = [ord(index)-48 for index in num1_str_list]
num2_int_list = [ord(index)-48 for index in num2_str_list]
# 得到了这两个字符串对应每个位置上字符的ASCII码后,现在就可以将每个字符串所对应的整数表示出来了
num1_sum = 0
num2_sum = 0
for num1_index in range(len(num1_int_list)):
num1_sum += num1_int_list[num1_index] * 10**(len(num1_int_list) - num1_index - 1)
for num2_index in range(len(num2_int_list)):
num2_sum += num2_int_list[num2_index] * 10**(len(num2_int_list) - num2_index - 1)
# 接下来直接将两个字符串对应的整数相乘得到结果
final_result = num1_sum * num2_sum
# 接下来就是要把得到的整数类型的结果转化为str字符串类型了
# 第一步是要得到final_result每一位的数,并保存起来
answer_int_list = []
if final_result > 0:
while final_result > 0:
indice = final_result % 10
answer_int_list.append(indice)
final_result = final_result // 10
# 因为我们是从个位数开始存放数组的,所以得将这个answer_int_list逆序排列得到原始数据的正常排列
answer_int_list.reverse()
else:
answer_int_list.append(final_result)
# 第二步就是要将每一个整数转化成相应的ASCII码
answer_str_list = [chr(index+48) for index in answer_int_list]
return ''.join(answer_str_list)
if __name__ == "__main__":
num1 = "123"
num2 = "456"
result = Solution().multiply(num1, num2)
print(result)
执行效率一般,在50%左右。