zoukankan      html  css  js  c++  java
  • [Leetcode] 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.

     题意:从左上角到右下角,总共有多少条路径。

    思路:动态规划。维护一个二维数组,dp[i][j]代表到达第i 行j列有几种方法。转移方程为:dp[i][j]=dp[i-1][j]+dp[i][j-1]。如图:

    代码如下:

     1 class Solution {
     2 public:
     3     int uniquePaths(int m, int n) 
     4     {
     5         if(m=0||n=0)    return 1;
     6         int dp[m][n];
     7         dp[0][0]=1;
     8 
     9         for(int i=1;i<m;++i)
    10             dp[i][0]=1;
    11         for(int i=1;i<n;++i)  
    12             dp[0][i]=1;
    13 
    14         for(int i=1;i<m;++i)
    15         {
    16             for(int j=1;j<n;++j)
    17             {
    18                 dp[i][j]=dp[i-1][j]+dp[i][j-1];
    19             }
    20         }  
    21         return dp[m-1][n-1];
    22     }
    23 };

    同种思路:另一种方法,使用滚动数组,利用一个一维数组实现上述过程,改动的思路是,二维数组中的dp[i][j]的值是表中的前一个和上一个,可以看成一维数组中的,前一个和其本身。

     1 class Solution {
     2 public:
     3     int uniquePaths(int m, int n) 
     4     {
     5         vector<int> dp(n,1);
     6         for(int i=1;i<m;++i)
     7         {
     8             for(int j=1;j<n;++j)
     9             {
    10                 dp[j]+=dp[j-1];
    11             }
    12         }
    13         return dp[n-1];
    14     }
    15 };
  • 相关阅读:
    消息中间件
    docker 安装elasticSearch6.7.1
    Curl实现ElasticSearch的增删改查
    docker 容器的mysql主从复制
    linux上docker安装centos7.2
    linux安装docker
    调用 CURL 使用正则抓取信息
    linux 一键安装lnmp环境
    laravel框架实现数据的删除和修改
    laravel 实现增 与查
  • 原文地址:https://www.cnblogs.com/love-yh/p/7121533.html
Copyright © 2011-2022 走看看