zoukankan      html  css  js  c++  java
  • LeetCode62. 不同路径

    题目

    分析

    dp【i】【j】代表从(0,0)出发走到(i,j)位置上有多少种路径。关于dp数组的初始化,由于机器人每次只能向右或者向下移动一步。所以第 0  行和第 0 列dp数组初始化为 1。动态转移方程:

    dp[i][j] =  dp[i - 1][j] + dp[i][j - 1],因为dp[i][j]只有这两个方向过来。遍历顺序,从左上到右下。

    代码

     1 class Solution {
     2 public:
     3     int uniquePaths(int m, int n) {
     4         vector<vector<int>>dp(m,vector<int>(n,0));
     5         for(int i = 0;i < n;i++) dp[0][i] = 1;
     6         for(int i = 0;i < m;i++) dp[i][0] = 1;
     7         for(int i = 1;i < m;i++){
     8             for(int j = 1;j < n;j++){
     9                 dp[i][j] = dp[i-1][j] + dp[i][j-1]; //动态转移方程
    10             }
    11         }
    12         return dp[m-1][n-1];
    13     }
    14 };

    时间复杂度为O(m * n) ,空间复杂度O(m * n)

    注意上面的dp数组可以优化为一维数组,这里不展开,以后总结下滚动数组的思想。

    分析

    直接按照图的深搜,但是时间会超时

    代码

     1 class Solution {
     2 public:
     3     int dfs(int i ,int j ,int m,int n){
     4         if(i > m || j > n) return 0; //越界
     5         if(i == m && j == n) return 1; //走到终点
     6         return dfs(i+1,j,m,n) + dfs(i,j+1,m,n);
     7     }
     8     int uniquePaths(int m, int n) {
     9         return dfs(0,0,m-1,n-1); //也可从(1,1)到(m,n)
    10     }
    11 };

    指数级的时间复杂度。

  • 相关阅读:
    2019.10.07题解
    2019.10.06题解
    2019.10.05'题解
    2019.10.05题解
    java邮件发送
    注释类型 XmlType
    Spring 注解
    @SuppressWarnings(unchecked)作用解释
    vm文件
    Apache Shiro 使用手册(一)Shiro架构介绍
  • 原文地址:https://www.cnblogs.com/fresh-coder/p/14386723.html
Copyright © 2011-2022 走看看