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);
    
    	}
    }
    
  • 相关阅读:
    Android开发 使用 adb logcat 显示 Android 日志
    【嵌入式开发】向开发板中烧写Linux系统-型号S3C6410
    C语言 结构体相关 函数 指针 数组
    C语言 命令行参数 函数指针 gdb调试
    C语言 指针数组 多维数组
    Ubuntu 基础操作 基础命令 热键 man手册使用 关机 重启等命令使用
    C语言 内存分配 地址 指针 数组 参数 实例解析
    CRT 环境变量注意事项
    hadoop 输出文件 key val 分隔符
    com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: Too many connections
  • 原文地址:https://www.cnblogs.com/yumiaomiao/p/8334657.html
Copyright © 2011-2022 走看看