zoukankan      html  css  js  c++  java
  • 【leetcode】62.63 Unique Paths

    62. Unique Paths

    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.

    Tips:机器人从左上一直走到右下,(只能走右与下)直到走到FInish的位置。

    package medium;
    
    import java.util.Arrays;
    
    public class L62UniquePaths {
    	public int uniquePaths(int m, int n) {
    		int[][] visited = new int[m][n];
    		for (int i = 0; i < m; i++) {
    			for (int j = 0; j < n; j++) {
    				visited[i][j] = -1;
    				System.out.println(i + "," + j + ">" + visited[i][j]);
    			}
    		}
    		int count = movingCount(m, n, 0, 0, visited);
    		return count;
    	}
    	public int movingCount(int m, int n, int row, int col, int[][] visited) {
    		int count = 0;
    		if (row < 0 || col < 0 || row >= m || col >= n)
    			return 0;
    		if (row == m - 1 && col == n - 1)
    			return 1;
    		if (visited[row][col] != -1)
    			return visited[row][col];
    		count = movingCount(m, n, row + 1, col, visited) + movingCount(m, n, row, col + 1, visited);
    		visited[row][col] = count;
    		return count;
    	}
    
            //另外一种很快地方法。当前状态依赖于前一种状态
    	public int Solution2(int m, int n) {
    		int[] row = new int[n];
    		Arrays.fill(row,1);
    		for (int i = 1; i < m; i++) {
    			for (int j = 1; j < n; j++) {
    				row[j]+=row[j-1];
    			}
    		}
    		return row[n-1];
    	}
    
    	public static void main(String[] args) {
    		L62UniquePaths cc = new L62UniquePaths();
    		int count = cc.uniquePaths(3, 4);
    		System.out.println(count);
    	}
    }            
    

     63. Unique Paths II

    Follow up for "Unique Paths":

    Now consider if some obstacles are added to the grids. How many unique paths would there be?

    An obstacle and empty space is marked as 1 and 0 respectively in the grid.

    For example,

    There is one obstacle in the middle of a 3x3 grid as illustrated below.

    [
      [0,0,0],
      [0,1,0],
      [0,0,0]
    ]
    

    The total number of unique paths is 2.

    Note: m and n will be at most 100.

    Tips:本题目是根据62题,稍作改变得来的,数组中1的位置不能走。

    package medium;
    
    public class L63UniquePaths2 {
    	
    	public int uniquePathsWithObstacles(int[][] obstacleGrid) {
    		if (obstacleGrid == null)
    			return 0;
    		int m = obstacleGrid.length;
    		int n = obstacleGrid[0].length;
    		int[][] visited = new int[m][n];
    		for (int i = 0; i < m; i++) {
    			for (int j = 0; j < n; j++) {
    				visited[i][j] = -1;
    				System.out.println(i + "," + j + ">" + visited[i][j]);
    			}
    		}
    		int count = movingCount(m, n, 0, 0, visited, obstacleGrid);
    		return count;
    
    	}
    
    	public int movingCount(int m, int n, int row, int col, int[][] visited, int[][] obstacleGrid) {
    		int count = 0;
    		if (row < 0 || col < 0 || row >= m || col >= n)
    			return 0;
    		if (obstacleGrid[row][col] == 0) {
    			if (row == m - 1 && col == n - 1)
    				return 1;
    			if (visited[row][col] != -1)
    				return visited[row][col];
    			count = movingCount(m, n, row + 1, col, visited, obstacleGrid)
    					+ movingCount(m, n, row, col + 1, visited, obstacleGrid);
    			visited[row][col] = count;
    		}
    
    		return count;
    	}
    
    	public static void main(String[] args) {
    		L63UniquePaths2 l63 = new L63UniquePaths2();
    		int[][] obstacleGrid = { { 0, 0, 0 }, { 0, 1, 0 }, { 0, 0, 0 } };
    		int[][] aa = { { 1 } };
    		int count = l63.uniquePathsWithObstacles(aa);
    		System.out.println(count);
    
    	}
    }
    
  • 相关阅读:
    10 个深恶痛绝的 Java 异常。。
    为什么公司宁愿 25K 重新招人,也不给你加到 20K?原因太现实……
    推荐一款代码神器,代码量至少省一半!
    Spring Cloud Greenwich 正式发布,Hystrix 即将寿终正寝。。
    hdu 3853 LOOPS(概率 dp 期望)
    hdu 5245 Joyful(期望的计算,好题)
    hdu 4336 Card Collector(期望 dp 状态压缩)
    hdu 4405 Aeroplane chess(概率+dp)
    hdu 5036 Explosion(概率期望+bitset)
    hdu 5033 Building (单调栈 或 暴力枚举 )
  • 原文地址:https://www.cnblogs.com/yumiaomiao/p/8334657.html
Copyright © 2011-2022 走看看