LintCode 114,115. 不同的路径

一.不同的路径

描述

有一个机器人的位于一个 m × n 个网格左上角。

机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角。

问有多少条不同的路径?

样例

Example 1:

Input: n = 1, m = 3
Output: 1	
Explanation: Only one path to target position.

Example 2:

Input:  n = 3, m = 3
Output: 6	
Explanation:
	D : Down
	R : Right
	1) DDRR
	2) DRDR
	3) DRRD
	4) RRDD
	5) RDRD
	6) RDDR

注意事项

n和m均不超过100

代码部分

public class Solution {
    /**
     * @param m: positive integer (1 <= m <= 100)
     * @param n: positive integer (1 <= n <= 100)
     * @return: An integer
     */
    public int uniquePaths(int m, int n) {
        // write your code here
        int[][] dp=new int[m][n];
        //dp[1][0]=1;
        //dp[0][1]=1;
        for(int k=0;k

二.不同的路径II

描述

"不同的路径" 的跟进问题:

现在考虑网格中有障碍物,那样将会有多少条不同的路径?

网格中的障碍和空位置分别用 1 和 0 来表示。

样例

Example 1:
	Input: [[0]]
	Output: 1


Example 2:
	Input:  [[0,0,0],[0,1,0],[0,0,0]]
	Output: 2
	
	Explanation:
	Only 2 different path.
	

注意事项

m 和 n 均不超过100

代码部分

public class Solution {
    /**
     * @param obstacleGrid: A list of lists of integers
     * @return: An integer
     */
    public int min(int a,int b){
        return a>b?b:a;
    }
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        // write your code here
        int m=obstacleGrid.length;//行数
        int n=obstacleGrid[0].length;//列数
        if(m==0||n==0){
            return 0;
        } 
        
        
        if(m==1){
            //return 1;
            //boolean flag=Arrays.asList(obstacleGrid[0]).contains(1);
            for(int l=0;l

补充说明

若整个二维矩阵中全是0,则dp[i][j]=dp[i-1][j]+dp[i][j-1];若矩阵中的1在边界,则从这个点往下的第一行或第一列dp[i][j]都等于0;若矩阵中的1不在边界,则只是这个点的dp[i][j]=0。

你可能感兴趣的:(数据结构与算法)