class Solution(object):
def uniquePaths(self, m, n):
"""
:type m: int
:type n: int
:rtype: int
"""
# dp[i][j]表示i到j有多少种走法
# dp[0][0]是1【其实也可以理解,不需要走也是一种走法】
dp = [[0]*n for _ in range(m)]
for i in range(m):
dp[i][0] = 1
for j in range(n):
dp[0][j] =1
for i in range(1,m):
for j in range(1,n):
dp[i][j] = dp[i-1][j]+dp[i][j-1]
return dp[m-1][n-1]
class Solution(object):
def uniquePathsWithObstacles(self, obstacleGrid):
"""
:type obstacleGrid: List[List[int]]
:rtype: int
"""
m = len(obstacleGrid)
n = len(obstacleGrid[0])
dp = [[0]*n for _ in range(m)]
dp[0][0] = 0 if obstacleGrid[0][0] else 1
for i in range(1,m):
dp[i][0]=0 if obstacleGrid[i][0] or not dp[i-1][0] else 1
for j in range(1,n):
dp[0][j]=0 if obstacleGrid[0][j] or not dp[0][j-1] else 1
for i in range(1,m):
for j in range(1,n):
dp[i][j] = 0 if obstacleGrid[i][j] else dp[i][j-1]+dp[i-1][j]
return dp[m-1][n-1]
python复制代码
class Solution(object):
def uniquePathsWithObstacles(self, obstacleGrid):
"""
:type obstacleGrid: List[List[int]]
:rtype: int
"""
m = len(obstacleGrid)
n = len(obstacleGrid[0])
dp = [[0]*n for _ in range(m)]
# dp[0][0] = 0 if obstacleGrid[0][0] else 1
# for i in range(1,m):
# dp[i][0]=0 if obstacleGrid[i][0] or not dp[i-1][0] else 1
# for j in range(1,n):
# dp[0][j]=0 if obstacleGrid[0][j] or not dp[0][j-1] else 1
for i in range(m):
if obstacleGrid[i][0]:
break
dp[i][0]=1
for j in range(n):
if obstacleGrid[0][j]:
break
dp[0][j]=1
for i in range(1,m):
for j in range(1,n):
dp[i][j] = 0 if obstacleGrid[i][j] else dp[i][j-1]+dp[i-1][j]
return dp[m-1][n-1]
class Solution(object):
def integerBreak(self, n):
"""
:type n: int
:rtype: int
"""
# dp[n]就是n拆分后得到的乘积最大值
# dp[i]=max(j*dp[i-j])
dp=[0,0,1] # dp[0]和dp[1]都没有意义,就是0
if n==2:
return dp[2]
for i in range(3,n+1):
dp.append(i-1)
for j in range(2,i//2+1): # 优化
dp[i] = max(dp[i],dp[i-j]*j,(i-j)*j)
return dp[n]
class Solution(object):
def numTrees(self, n):
"""
:type n: int
:rtype: int
"""
# dp[i]有多棵树
# dp[i]其实就是确定一个头节点,然后左子树的个数乘以右子树的个数,对所有情况进行加和!
# dp[0]也是1
dp=[1,1]
if n==1:
return 1
for i in range(2,n+1):
dp.append(0)
for j in range(1,i+1):
dp[i]+=dp[j-1]*dp[i-j]
return dp[n]