问题1:在一个m*n的网格里,从左上到右下一共有多少种路径,要求,只能向右或向下走?(m,n>0)
代码及注释如下:
#!/usr/bin/python
def get_case(m,n):
#m,n分别为网格的行列数
#创建一个列表
#f[i][j]表示从左上开始到第i行第j列的点的路径数
f = [[0 for x in range(n)] for y in range(m)]
#f[0][0]表示初始情况
f[0][0] = 1
for i in range(m):
#先行
for j in range(n):
#后列
#边界条件,在最上面行或者在最左边的列
if i == 0 or j == 0:
f[i][j] = 1
else:
# 上面走下来+左边走过来
f[i][j] = f[i-1][j]+f[i][j-1]
return f[m-1][n-1]
m = 3
n=4
print(get_case(m,n))
#结果:10
若网格有障碍,且1表示不能通过,0表示可以通过,如何解?
代码及注释如下:
def get_case(A):
m,n = len(A),len(A[0])
if m == 0 or n == 0:
return 0
f = [[0 for x in range(n)] for y in range(m)]
for i in range(m):
for j in range(n):
#若有障碍,则路径数位0
if A[i][j] == 1:
f[i][j] == 0
else:
#无障碍
if i == 0 and j == 0:
#初始条件,f[0][0]=1
f[i][j] = 1
else:
if i-1 >= 0:
# 从上边走下来