博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] Unique Paths 不同的路径
阅读量:6710 次
发布时间:2019-06-25

本文共 1691 字,大约阅读时间需要 5 分钟。

 

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 7 x 3 grid. How many possible unique paths are there?

Note: m and n will be at most 100.

Example 1:

Input: m = 3, n = 2Output: 3Explanation:From the top-left corner, there are a total of 3 ways to reach the bottom-right corner:1. Right -> Right -> Down2. Right -> Down -> Right3. Down -> Right -> Right

Example 2:

Input: m = 7, n = 3Output: 28

 

这道题让求所有不同的路径的个数,一开始还真把我难住了,因为之前好像没有遇到过这类的问题,所以感觉好像有种无从下手的感觉。在网上找攻略之后才恍然大悟,原来这跟之前那道 很类似,那道题是说可以每次能爬一格或两格,问到达顶部的所有不同爬法的个数。而这道题是每次可以向下走或者向右走,求到达最右下角的所有不同走法的个数。那么跟爬梯子问题一样,我们需要用动态规划Dynamic Programming来解,我们可以维护一个二维数组dp,其中dp[i][j]表示到当前位置不同的走法的个数,然后可以得到递推式为: dp[i][j] = dp[i - 1][j] + dp[i][j - 1],这里为了节省空间,我们使用一维数组dp,一行一行的刷新也可以,代码如下:

 

解法一:

class Solution {public:    int uniquePaths(int m, int n) {        vector
dp(n, 1); for (int i = 1; i < m; ++i) { for (int j = 1; j < n; ++j) { dp[j] += dp[j - 1]; } } return dp[n - 1]; }};

 

这道题其实还有另一种很数学的解法,参见网友,实际相当于机器人总共走了m + n - 2步,其中m - 1步向下走,n - 1步向右走,那么总共不同的方法个数就相当于在步数里面m - 1和n - 1中较小的那个数的取法,实际上是一道组合数的问题,写出代码如下:

 

解法二:

class Solution {public:    int uniquePaths(int m, int n) {        double num = 1, denom = 1;        int small = m > n ? n : m;        for (int i = 1; i <= small - 1; ++i) {            num *= m + n - 1 - i;            denom *= i;        }        return (int)(num / denom);    }};

 

类似题目:

 

参考资料:

 

转载地址:http://kvalo.baihongyu.com/

你可能感兴趣的文章
[deviceone开发]-动画示例源码
查看>>
实现iOS图片等资源文件的热更新化(一): 从Images.xcassets导出合适的图片
查看>>
magento2 ajax机制 (customer-data)
查看>>
【二次元的CSS】—— CSS3画的能换频道的电视机(合集)
查看>>
magento 2模块开发实例helloworld模块
查看>>
关于if-else流程图的画法
查看>>
一天一点linux(10):ubuntu如何设置静态IP和动态IP?
查看>>
AndroidStudio好用的插件
查看>>
聊一聊 JS 中的『隐式类型转换』
查看>>
calc 与 box-sizing 的替代
查看>>
如何使用 Java 构建微服务?
查看>>
通过 SignalR 类库,实现 ASP.NET MVC 的实时通信
查看>>
[x98 air 3g平板]安装任意版本32位win10的方法
查看>>
12个用得着的JQuery代码片段
查看>>
Apache POI 4.1.0 发布,Office 文档的 Java API
查看>>
[Leetcode] Move Zeroes 移动零
查看>>
如何在Ubuntu 14.04服务器上自动化部署Spring Boot的应用
查看>>
kafka的SSL证书校验不通过
查看>>
MySQL行锁堵塞案例
查看>>
glom模块的使用(二)
查看>>