leetcode----62. Unique Paths

链接:

https://leetcode.com/problems/unique-paths/

大意:

给定一个二维数组的大小m*n,要求从起点(左上角)走到终点(右下角)有多少种方案。规定:每次移动只能向右移动一格或者向下移动一格。例子:

leetcode----62. Unique Paths_第1张图片

思路:

动态规划。到达某点 i,j 的方案数为 到达该点的上面一点 i-1,j的方案数+ 到达该点左边一点 i,j-1 的方案数 。动态规划递推公式找到了,接下来就是写代码实现。(注意下构造动态规划数组的小技巧)

代码:

class Solution {
    public int uniquePaths(int m, int n) {
        int[][] dp = new int[m + 1][n + 1]; // 分配数组为 [m+1][n+1]可以方便解决数组越界的判断
        dp[1][1] = 1; // 初始化dp[1][1] 也就是起点到起点的的方案数为1
        for (int i = 1; i <= m; i++) {
            for (int j = 1; j <= n; j++) {
                if (i != 1 || j != 1)
                    dp[i][j] = dp[i - 1][j] + dp[i][j - 1]; // 到达每一个点的方案数为由到上面点的方案数+到左边点的方案数
            }    
        }
        return dp[m][n];
    }
}

结果:

leetcode----62. Unique Paths_第2张图片

结论:

动态规划,首先想想状态怎么转移,找出递推公式。 

 

 

你可能感兴趣的:(leetcode,leetcode,动态规划)