67. Unique Paths

 

当前的数目 = 同行上列 + 同列上行  回溯法把爷逗乐了,runtime爆炸。所以肯定是DP

 

DP:

public class Solution {
    public int uniquePaths(int m, int n) {
        int[][] ways = new int[m][n];
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (i == 0 || j == 0) ways[i][j] = 1;
                else ways[i][j] = ways[i-1][j] + ways[i][j-1];
            }
        }
        return ways[m-1][n-1];
    }
}

第一行和第一列的值只能是1,因为只有一种方法,第一行:向右,第一列:向下。

其余的,就是到达 (i , j) 的路径数 == 到达(i-1,j)的途径 + 到达(i,j-1)的途径。

 还有种方法,是节省了space,只用了一维数组

public class Solution {
    public int uniquePaths(int m, int n) {
        int[] ways = new int[n];
        ways[0] = 1;
        for(int i = 0; i < m; i++)
            for (int j = 1; j < n; j++)
                ways[j] += ways[j-1];
        return ways[n-1];
    }
}

 

posted @ 2019-02-20 07:58  Schwifty  阅读(102)  评论(0编辑  收藏  举报