您的位置:首页 > 产品设计 > UI/UE

动态规划——62. Unique Paths[medium]

2017-05-13 21:38 295 查看
题目描述

A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below).

The robot can only move either down or right at any point in time. The robot is trying to reach the bottom-right corner of the grid (marked 'Finish' in the diagram below).

How many possible unique paths are there?



Above is a 3 x 7 grid. How many possible unique paths are there?

Note: m and n will be at most 100.
从左上角走到右下角,只能向下或向右移动,求一共有几种走法。

解题思路

这道题和之前那道爬楼梯动态规划——70. Climbing Stairs[easy])的很像,逆向思考,如果当前步是最后一步,那么,倒数第二步会是怎样的?

倒数第二步要么在当前步的左侧,要么在当前步的上侧,两种情况相加就能得出总的走法了。

于是,使用一个二维数组,f[i][j]表示走到当前步的总的走法,于是有:f[i][j] = f[i][j-1]+ f[i-1][j]

(还要考虑边界问题,超出棋盘的部分都应该是  0  )

代码如下

class Solution {
public:
int uniquePaths(int m, int n) {
vector<int> tmp(n, 0);
vector<vector<int> > f(m,tmp);
f[0][0] = 1;

for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
int col = j - 1;
int row = i - 1;

if (i == 0 && j == 0)
continue;

if (col == -1 && row == -1)
f[i][j] = 0 + 0;

else if (col == -1)
f[i][j] = 0 + f[row][j];

else if (row == -1)
f[i][j] = f[i][col] + 0;

else
f[i][j] = f[i][col] + f[row][j];
}
}

return f[m - 1][n - 1];
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  动态规划