但是解答很简单。因为机器人只能向右 / 下 移动,所以要到达目标 A 的可能路线就是到达它正上方的那一块的可能路线数和到达它正右方的那一块的可能路线数之和。
所以就简单了:
int uniquePaths(int m, int n){ vector> record((m + 1), vector (n + 1)); function getPathsNum; getPathsNum = [&](int a, int b) { if (a == 0 || b == 0){ return 0; } if (a == 1 || b == 1){ return 1; } int paths_num = record[a][b]; if (paths_num != 0){ return paths_num; } int&& result = getPathsNum(a - 1, b) + getPathsNum(a, b - 1); record[a][b] = result; return result; }; return getPathsNum(m, n);}
这个解法的思想就是存储需要被重复访问的数据来节省时间,但并不是动规的思想。