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

LeetCode - 62. Unique Paths

2016-07-09 17:06 218 查看
这道题是一道典型的动态规划题目,在题目中出现以下情况的话经常要考虑使用动态规划的方法:



而动态规划的话,通常会有以下几种类型:Matrix, Sequence, Two Sequences和Backpack。这道题目就是Matrix DP,而在Matrix DP中,有四个步骤需要考虑:

state: f[x][y]表示从起点走到坐标x,y...

function: 研究最后一步怎么走

initialize: 起点

answer: 终点

对于这道特定的题目,有以下的情况:



因为最后一步走法的数量等于从上面来的走法的数量+从左边来的走法的数量,另外需要注意的是,动态规划中用到二维数组的话,最好把[i][0]和[0][j]也进行初始化一下。时间复杂度为O(n^2),空间复杂度为O(m * n),代码如下:

public class Solution {
public int uniquePaths(int m, int n) {
int[][] matrix = new int[m]
;

// Initialize
for(int i = 0; i < m; i++){
matrix[i][0] = 1;
}
for(int j = 0; j < n; j++){
matrix[0][j] = 1;
}

// DP
for(int i = 1; i < m; i++){
for(int j = 1; j < n; j++){
matrix[i][j] = matrix[i - 1][j] + matrix[i][j - 1];
}
}

return matrix[m - 1][n - 1];
}
}


知识点:

1. 使用动态规划的情况,以及培养动态规划的思想

2. 处理动态规划问题的四个要素,以及每一步所代表的意义

3. 动态规划中使用到二维数组的话,最好把[i][0], [0][j]也初始化一下

4. 注意这里题目中规定了只能向下或向右走,如果没有这个规定的话,那么不能使用动态规划去处理这个问题,因为我们没有办法去找function之间的关系
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息