• 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?

    img

    Above is a 3 x 7 grid. How many possible unique paths are there?

    Note: m and n will be at most 100.

    我的答案:

        public static int uniquePaths(int m, int n) {
        	int top = 1;
        	int left = 1;
        	return pathSum(top,left,m,n);
        }
    	public static int pathSum(int top,int left,int m,int n){
         	if( left == m && top == n){
         		return 1;
         	}else if(top==n){
         	return pathSum(top,left+1,m,n);
         	}else if( left == m){
         		return pathSum(top+1,left,m,n);
         	}else if( left < m && top < n){
         		return pathSum(top+1,left,m,n)+ pathSum(top,left+1,m,n);
         	} 
         	return 0;
         }
    

    大神答案:

    1.简化版的递归
         public int uniquePaths(int m, int n) {
            return uniquePaths(1,1,m, n);
        }
        
        public int uniquePaths(int currentRow, int currentColumn, int m, int n){
            if(currentRow==m || currentColumn==n){
                return 1;
            }    
            return uniquePaths(currentRow+1, currentColumn, m ,n ) + uniquePaths(currentRow, 					currentColumn+1, m, n);
        }
    
    2.利用杨辉三角求解:
    在Dynamic Programming思路的指引下,我们可以尝试将递归的方法改变为循环的方法来解决。这里就运用到了数学中的杨辉三角。很显然,最左侧一行和最顶侧一行的到达路径数都是1,而任何一个非该行列的节点都可以通过左侧节点和上侧节点的路径数相加得到从起点出发到达自己共有的路径数。我们可以利用二维数组来实现叠加。代码如下:
        public static int pathSum(int top,int left,int m,int n){
        	int[][] a = new int[m][n];
        	
        	for (int i = 0; i < m; i++) {
    			a[i][0] = 1;
    		}
        	
        	for (int i = 0; i < n; i++) {
    			a[0][i]=1;
    		}
        	
        	for (int i = 1; i < m; i++) {
    			for (int j = 1; j < n; j++) {
    				a[i][j] = a[i][j-1]+a[i-1][j];
    			}
    		}
        	return a[m-1][n-1];
        }
    
  • 相关阅读:
    C#将JSON字符串对象序列化与反序列化
    Chrome 中的 JavaScript 断点设置和调试技巧
    JS 关闭 页面 浏览器 事件
    使用Jquery向一个空白网页动态创建一个iframe,及嵌入页面,和向嵌入页面传参
    js/jquery判断浏览器的方法小结
    Javascript中document.execCommand()的用法
    js 点击默认另存 ,不是打开 Blob 操作
    浅析jQuery删除节点的三个方法
    IE 和Firefox的js兼容性总结
    removeNode is not defined removeNode is not a function
  • 原文地址:https://www.cnblogs.com/luozhiyun/p/8418766.html
Copyright © 2020-2023  润新知