一个机器人位于一个m*n的网格的左上角。 机器人可以在任何时间点移动任何方向,但是每个网格只能达到一次。机器人正试图到达网格的右下角。 有多少种可能的独特路径?
样例 1:
输入:
2 3
输出:
4
样例 2:
输入:
3 3
输出:
12
class Solution {
int sum = 0;
int r,c;
vector<vector<int>> dir = {{1,0},{-1,0},{0,1},{0,-1}};
public:
int uniquePaths(int m, int n) {
if(m==0 || n==0)
return 0;
r= m, c= n;
vector<vector<int>> map(m,vector<int>(n,1));
map[0][0] = 0;//标记走过
dfs(map,0,0);
return sum;
}
void dfs(vector<vector<int>>& map, int i, int j)
{
if(i==r-1 && j==c-1)
{
sum++;
return;
}
int x, y;
for(int k = 0; k < 4; ++k)
{
x = i+dir[k][0];
y = j+dir[k][1];
if(x>=0 && x<r && y>=0 && y<c && map[x][y])
{
map[x][y]=0;//标记走过
dfs(map,x,y);
map[x][y]=1;//回溯
}
}
}
};
100% 数据通过测试 总耗时 101 ms 您的提交打败了 81.90% 的提交!