• LeetCode OJ: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?

    题目的意思就是给你一个m*n网格,求从左上角到右下角的路径条数即可,用dp很容易解决,推到式为res[i][j] = res[i - 1][j] + res[i][j - 1]。意思就是到一个特定点的路径条数是到其左侧或者上侧点的路径条数的总和。

    代码如下:

     1 class Solution {
     2 public:
     3     int uniquePaths(int m, int n) {
     4         vector<vector<int> > ans(m, vector<int>(n, 0));
     5         for(int i = 0; i < m; ++i)
     6             ans[i][0] = 1;
     7         for(int j = 0; j < n; ++j)
     8             ans[0][j] = 1;
     9 
    10         for(int i = 1; i < m; ++i){
    11             for(int j = 1; j < n; ++j){
    12                 ans[i][j] = ans[i - 1][j] + ans[i][j - 1];
    13             }
    14         }
    15         return ans[m - 1][n - 1];
    16     }
    17 };

    还有一种方法是使用dfs来实现,但是数大了就容易超时,这题的本意可能就是dfs,这里把代码放上:

     1 class Solution {
     2 public:
     3     int uniquePaths(int m, int n) {
     4         times = 0;
     5         maxHor = m, maxVer = n;
     6         dfs(0,0);
     7         return times;
     8     }
     9     void dfs(int hor, int ver){
    10         if((hor == maxHor - 1) && (ver = maxVer - 1))
    11             times++;
    12         else{
    13             if(hor + 1 < maxHor)  //注意这里不是while
    14                 dfs(hor + 1, ver);
    15             if(ver + 1 < maxVer)
    16                 dfs(hor, ver + 1);
    17         } 
    18     }
    19 private:
    20     int times;
    21     int maxHor;
    22     int maxVer;
    23 };

     java版本如下所示,dp实现:

     1 public class Solution {
     2     public int uniquePaths(int m, int n) {
     3         if(m == 0 || n == 0)
     4             return 0;
     5         int [][] grid = new int [m][n];
     6         for(int i = 0; i < m; ++i){
     7             grid[i][0] = 1;
     8         }
     9         for(int i = 0; i < n; ++i){
    10             grid[0][i] = 1;
    11         }
    12         for(int i = 1; i < m; ++i){
    13             for(int j = 1; j < n; ++j){
    14                 grid[i][j] = grid[i-1][j] + grid[i][j-1];
    15             }
    16         }
    17         return grid[m-1][n-1];
    18     }
    19 }
  • 相关阅读:
    idea项目maven配置
    IDEA配置maven项目启动
    IDEA导入本地项目教程
    EasyUi前端js禁止短时间内多次点击按钮方法
    EasyUi的form验证框位置修改
    div中的div如何居中
    Java导出Excel使用POI之SXSSFWorkbook方式
    java.lang.NoSuchMethodError
    eclipse导出项目时报错:problems were encountered during export
    直线检测方法—LSD论文翻译
  • 原文地址:https://www.cnblogs.com/-wang-cheng/p/4901263.html
Copyright © 2020-2023  润新知