zoukankan      html  css  js  c++  java
  • leetcode-unique paths

    代码中的两个方法都是动态规划。

    第二种方法很好理解,第一种方法是在第二种方法基础上进行优化,即“降维”,变成一维动态规划。

    如soulmachine所写,对于 f[j] = f[j - 1] + f[j];

    右边的f[j],表示老的f[j],与公式中的f[i-1][j] 对应

    左边的f[j],表示更新后的f[j],与公式中的f[i[[j] 对应

    其实画个3行7列的图自己用纸笔算一下就知道了。等号右边的f[j]代表的其实就是图中上一行的“老”数据,即对应图中当前待更新元素的“上”邻居。而等式右边的f[j-1]其实是在上一轮中刚刚被更新的数据,在图中对应着“左”边的邻居。有了“上”邻居和“左”邻居,数据自然就求出来了。

    想不通的时候就拿纸笔“过一遍”,就很清晰了。

    除了动态规划外,还可以用别的方法来解答。除了soumachine提供深搜、备忘录之外,还可以看看 http://leetcode.com/2010/11/unique-paths.html

     1 #include <iostream>
     2 #include <vector>
     3 using namespace std;
     4 
     5 class Solution {
     6 public:
     7     int uniquePaths(int m, int n) {
     8         vector<int> a(n,0);
     9         a[0] = 1;
    10         for (int i = 0; i < m; i++)
    11         { 
    12             for (int j = 1; j < n; j++)
    13             {
    14                 a[j] = a[j] + a[j - 1];
    15             }
    16         }
    17         return a[n-1];
    18     }
    19 };
    20 class Solution2 {
    21 public:
    22     int uniquePaths(int m, int n) {
    23         vector<vector<int>> f(m,vector<int>(n,0));
    24         for (int i = 0; i < m; i++)
    25             f[i][0] = 1;
    26         for (int i = 0; i < n; i++)
    27             f[0][i] = 1;
    28         for (int i = 1; i < m; i++)
    29         {
    30             for (int j = 1; j < n; j++)
    31             {
    32                 f[i][j] = f[i - 1][j] + f[i][j - 1];
    33             }
    34         }
    35         return f[m - 1][n - 1];
    36     }
    37 };
    38 int main()
    39 {
    40     Solution2 s;
    41     int m = 3;
    42     int n = 7;
    43     cout<<s.uniquePaths(m,n)<<endl;
    44     return 0;
    45 }
  • 相关阅读:
    Linux中的计算器(bc)
    在Linux中显示日历(cal)
    在Linux中显示日期(date)
    Linux中的注销当前用户
    Linux中的提示符
    在Linux中启动X Window
    硬盘知识
    划分Linux分区
    Linux中的关机
    hdu4424 Conquer a New Region 并查集/类似最小生成树
  • 原文地址:https://www.cnblogs.com/forcheryl/p/3988862.html
Copyright © 2011-2022 走看看