62. 不同路径
1、不知道哪里错了,去调试一下~
def uniquePaths(self, m: int, n: int) -> int:
old_row = [i for i in range(1,n)]
new_row = [0]*(n-1)
for i in range(1,m):
left =i
for j in range(n-1):
new_row[j]= left + old_row[j]+2
left = new_row[j]
# 赋值,而不是改变指针
old_row = new_row[:]
return new_row[-1]
2、原来是递归方程写错了!从左面还有从上面过来都不会增加原来的种类,新的路径种类就是从左的种类数+从上的种类数【之前好像这样错过】。
3、不要忘了n=1 or m=1的特殊情况
class Solution:
def uniquePaths(self, m: int, n: int) -> int:
if n==1 or m==1:
return 1
old_row = [1]*(n-1)
new_row = [0]*(n-1)
for i in range(1,m):
left =1
for j in range(n-1):
new_row[j]= left + old_row[j]
left = new_row[j]
# 赋值,而不是改变指针
old_row = new_row[:]
return new_row[-1]
4、没有用二维矩阵记录所有数值,而是只记录左侧和上一行、本行的数据,减少了内存空间的使用。
63. 不同路径 II
1、在62的基础上进行改进。不过第一次写的时候忘记判断该位置是否为1了,如果为1,就代表着此路不通,经过这个点到达其下或者右的方法为0,因为此路不通。
2、
class Solution:
def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int:
m = len(obstacleGrid)
n = len(obstacleGrid[0])
if n==1:
if (1 in [ i[0] for i in obstacleGrid]) :
return 0
else:
return 1
if m==1:
if 1 in obstacleGrid[0]:
return 0
else:
return 1
# 初始化第一行
if 1 in obstacleGrid[0]:
index_row = obstacleGrid[0].index(1)
old_row = [1]*(index_row-1) + [0]*(n-index_row)
else:
old_row = [1]*(n-1)
new_row = [0]*(n-1)
# 初始化left列表
left_row = [i[0] for i in obstacleGrid]
if 1 in left_row:
index_left = left_row.index(1)
left = [1]*(index_left-1)+[0]*(m-index_left)
else:
left = [1]*(m-1)
for i in range(1,m):
left_val = left[i-1]
for j in range(n-1):
if obstacleGrid[i][j+1]==1:
new_row[j]=0
else:
new_row[j]= left_val + old_row[j]
left_val = new_row[j]
# 赋值,而不是改变指针
old_row = new_row[:]
return new_row[-1]
3、