Leetcode 043-字符串相乘,046-全排列,053-最大子序和
043-字符串相乘
题目描述
给定一个 没有重复 数字的序列,返回其所有可能的全排列。
代码(python)
class Solution :
def multiply ( self, num1: str , num2: str ) - > str :
if num1 == "0" or num2 == "0" : return "0"
results = [ ]
for i in range ( len ( num1) + len ( num2) ) :
results. append( 0 )
for i in range ( len ( num1) - 1 , - 1 , - 1 ) :
for j in range ( len ( num2) - 1 , - 1 , - 1 ) :
p1, p2 = i + j, i + j + 1
mul = ( ord ( num1[ i] ) - ord ( '0' ) ) * ( ord ( num2[ j] ) - ord ( '0' ) )
sums = mul + results[ p2]
results[ p2] = sums % 10
results[ p1] = results[ p1] + sums // 10
cur = 0
while cur < len ( results) and results[ cur] == 0 :
cur = cur + 1
resultstring = ''
for i in range ( cur, len ( results) ) :
resultstring = resultstring + str ( results[ i] )
if resultstring == '' :
return '0'
return resultstring
046-全排列
题目描述
给定一个 没有重复 数字的序列,返回其所有可能的全排列。
代码(python)
class Solution :
def permute ( self, nums: List[ int ] ) - > List[ List[ int ] ] :
def dfs ( nums, size, depth, path, state, res) :
if depth == size:
res. append( path)
return
for i in range ( size) :
if ( ( state >> i) & 1 ) == 0 :
dfs( nums, size, depth + 1 , path + [ nums[ i] ] , state ^ ( 1 << i) , res)
size = len ( nums)
if size == 0 :
return [ ]
state = 0
res = [ ]
dfs( nums, size, 0 , [ ] , state, res)
return res
053-最大子序和
题目描述
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
代码(python)
class Solution :
def maxSubArray ( self, nums: List[ int ] ) - > int :
if not nums: return None
for i in range ( 1 , len ( nums) ) :
nums[ i] += max ( nums[ i- 1 ] , 0 )
return max ( nums)