62. 不同路径
题目链接:62. 不同路径
这题就是和那个爬楼梯一样,累加计算。dp[i]=dp[i-1]+dp[i-2]
class Solution(object):
def uniquePaths(self, m, n):
"""
:type m: int
:type n: int
:rtype: int
"""
dp=[[0]*m for _ in range(n)]
#print(dp[0][1])
for i in range(m):
#print(i)
dp[0][i]=1
for j in range(n):
dp[j][0]=1
for i in range(1,n):
for j in range(1,m):
dp[i][j]=dp[i-1][j]+dp[i][j-1]
return dp[n-1][m-1]
63. 不同路径 II
题目链接:63. 不同路径 II
这题是之前那个的变体,要注意有障碍物的话不能继续走,初始化很重要。
class Solution(object):
def uniquePathsWithObstacles(self, obstacleGrid):
"""
:type obstacleGrid: List[List[int]]
:rtype: int
"""
dp=[[0]* len(obstacleGrid[0]) for _ in range(len(obstacleGrid))]
#初始化
for i in range(len(obstacleGrid[0])):
if obstacleGrid[0][i]==1:
break
else:
dp[0][i]=1
for j in range(len(obstacleGrid)):
if obstacleGrid[j][0]==1:
break
else:
dp[j][0]=1
for i in range(1,len(obstacleGrid)):
for j in range(1,len(obstacleGrid[0])):
if obstacleGrid[i][j]==0:
dp[i][j]=dp[i-1][j]+dp[i][j-1]
return dp[-1][-1]
343. 整数拆分
题目链接:343. 整数拆分
class Solution(object):
def integerBreak(self, n):
"""
:type n: int
:rtype: int
"""
dp=[0]*(n+1)
dp[2]=1
for i in range(3,n+1):
for j in range(1,(i//2)+1):
dp[i]=max(dp[i],j*(i-j),j*dp[i-j])
return dp[-1]
关于为什么max里面有dp[i],主要原因就是当前的最大值要和更新后的值进行比较,所以必须要有dp[i]。