- 字符串相乘
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
思路:模拟了小学数学的列竖式
class Solution:
def multiply(self, num1: str, num2: str) -> str:
'''
num1的第i位(高位从0开始)和num2的第j位相乘的结果在乘积中的位置是[i+j, i+j+1]
例: 123 * 45, 123的第1位 2 和45的第0位 4 乘积 08 存放在结果的第[1, 2]位中
index: 0 1 2 3 4
1 2 3
* 4 5
---------
1 5
1 0
0 5
---------
0 6 1 5
1 2
0 8
0 4
---------
0 5 5 3 5
这样我们就可以单独都对每一位进行相乘计算把结果存入相应的index中
'''
if num1 == '0' or num2 == '0':return '0'
res = 0
for i in range(1,len(num1) + 1):
for j in range(1,len(num2) + 1):
res += int(num1[-i]) * int(num2[-j]) * 10 ** (i + j - 2)
return str(res)
class Solution(object):
def multiply(self, num1, num2):
"""
:type num1: str
:type num2: str
:rtype: str
"""
return str(int(num1) * int(num2))
- 全排列
上面这段代码也能通过,但是int是无限大的,不符合题目要求
给定一个 没有重复 数字的序列,返回其所有可能的全排列。
class Solution(object):
def permute(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
if len(nums)<=1:
return [nums]
output = [[nums[0],nums[1]],[nums[1],nums[0]]]
for i in range(2,len(nums)):
tmp = nums[i]
output_new = []
for j in range(len(output)):
output[j].append(tmp)
output_new.append(output[j])
for k in range(len(output[j])-1):
line = [n for n in output[j]]
line[len(line)-1] = line[k]
line[k] = tmp
output_new.append(line)
output = output_new
return output
- 最大子序和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和
class Solution:
def maxSubArray(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
le = len(nums)
for i in range (1,le):
submax = max(nums[i]+nums[i-1],nums[i])
nums[i] = submax
return max(nums)