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

来源:互联网 发布:windows更新清理 编辑:程序博客网 时间:2024/06/06 05:38

题目描述

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;elsef[i][j] = f[i][col] + f[row][j];}}return f[m - 1][n - 1];    }};


0 0
原创粉丝点击