Algorithm 如何在NxM网格中查找所有路径?

Algorithm 如何在NxM网格中查找所有路径?,algorithm,recursion,dynamic-programming,Algorithm,Recursion,Dynamic Programming,这是我的问题: 机器人位于m x n网格的左上角 机器人只能在任何时间点向下或向右移动。机器人正试图到达网格的右下角 有多少种可能的唯一路径 这是我的代码: def paths(m,n,a,b,memo): if(a == 0 or b == 0): return 0 if m>a or n>b: return 0 if m==a and n==b: return 1 if str(m)+s

这是我的问题:

机器人位于m x n网格的左上角

机器人只能在任何时间点向下或向右移动。机器人正试图到达网格的右下角

有多少种可能的唯一路径

这是我的代码:

def paths(m,n,a,b,memo):

    if(a == 0 or b == 0):
        return 0

    if m>a or n>b:
        return 0

    if m==a and n==b:
        return 1
   
    if str(m)+str(n) in memo:
        return memo[str(m)+str(n)]
    else:  
        memo[str(m)+str(n)] = paths(m+1,n,a,b,memo) + paths(m,n+1,a,b,memo)
        return memo[str(m)+str(n)] 

m=23
n=12
memo =  dict()
print(paths(0,0,m-1,n-1,memo))

对于大多数情况,我都得到了正确的答案,但对于m=23和n=12的情况,我的答案是错误的。正确答案是
193536720
当我得到
201648450

时,不会
str(21)+str(2)
等于
str(2)+str(12)
,因此你会得到错误的值?哦,这是个愚蠢的错误。谢谢,我将
str(m)+str(n)
更改为
str(m)+“”+str(n)
,效果很好。我怀疑这些字符串转换会大大降低代码的速度。为什么不把
(m,n)
元组存储在缓存中,而不是将这些值转换成字符串-例如,
memo[(m,n)]=路径(m+1,n,a,b,memo)+路径(m,n+1,a,b,memo)
如果(m,n)在memo:return memo[(m,n)]
@squemishossifrage-谢谢,你是对的。运行时间提高了很多。:)这只是一道简单的数学题,这道题有一个公式