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

Example 1:

Input: m = 3, n = 2
Output: 3
Explanation:
From the top-left corner, there are a total of 3 ways to reach the bottom-right corner:

  1. Right -> Right -> Down
  2. Right -> Down -> Right
  3. Down -> Right -> Right

Example 2:

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

Constraints:

1 <= m, n <= 100

It’s guaranteed that the answer will be less than or equal to 2 * 10 ^ 9.

1 排列组合解法

这是一个组合问题,可以在没有 DP 的情况下解决。对于 mxn 网格,机器人必须准确地向下移动 m-1 步和向右移动 n-1 步,这些可以以任何顺序完成。

例如,给出的问题是 3x7 矩阵,机器人需要以任意顺序执行 2+6 = 8 步,其中 2 步向下,6 步向右。那不过是一个排列问题。向下表示为“D”,向右表示为“R”,以下是路径之一:-

DRRRDRRR

我们必须告诉上面给定单词的排列总数。因此,将 m & n 都减少 1 并应用以下公式:-

总排列 = (m+n)!/(m!* n!)

以下是我的代码做同样的事情:-

class Solution {public int uniquePaths(int m, int n) {// permulation: (m + n)! / (m! * n!)if (m == 1 || n == 1) return 1;m--;n--;// switch m is bigif (m < n) {n = m + n;m = n - m; // nn = n - m; // m}int j = 1;long sum = 1;for (int i = m + 1; i <= m + n; i++, j++) {sum = sum * i;sum = sum / j;}return (int)sum;}
}

2 动态规划解法 – 之前的文章

动态规划主要是找到跟上一条记录联系的公式,这里的公式就是path[i][j] = path[i-1][j] + path[i][j-1]。可以看下面的图,

  1. 往下走的列path[i][0]都初始化为1,表示一直往下有一种的解法;往右走的行path[0][j]都初始化为1,表示一直往右有一种的解法。

  2. 再看第二列,当前位置的记录是由上面的解法,和左边的解法,加起来就是当前的解法。所以 2 = 1 + 1, 3 = 2 + 1. 以此类推。

  3. 结果是path[m-1][n-1], 因为是从0开始计算的。

public int uniquePaths(int m, int n) {int[][] dp = new int[m][n];for (int i = 0 ; i < m; i++) {dp[i][0] = 1;}for (int k = 0; k < n; k++) {dp[0][k] = 1;}for (int i = 1; i < m; i++) {for (int k = 1; k < n; k++) {dp[i][k] = dp[i - 1][k] + dp[i][k - 1];}}
​return dp[m - 1][n - 1];}

参考

https://leetcode.com/problems/unique-paths/discuss/22958/Math-solution-O(1)-space

算法:62唯一路径Unique Paths 动态规划和排列组合算法相关推荐

  1. JavaScript实现唯一路径问题的动态编程方法的算法(附完整源码)

    JavaScript实现唯一路径问题的动态编程方法的算法(附完整源码) dpUniquePaths.js完整源代码 dpUniquePaths.test.js完整源代码 dpUniquePaths.j ...

  2. 排列 组合 算法(一)

    排列组合算法 我们都知道排列与组合的个数可以利用公式很容易的求出来,但是要是把这些排列组合的序列一一输出怎么办呢? 下面结合<组合数学>(第四版)卢开澄卢华明编著,好好总结排列与组合的算法 ...

  3. python 排列组合速度_Python实现的简单排列组合算法示例

    本文实例讲述了Python实现的简单排列组合算法.分享给大家供大家参考,具体如下: 1.python语言简单.方便,其内部可以快速实现排列组合算法,下面做简单介绍 2.一个列表数据任意组合 主要是利用 ...

  4. 排列组合算法之二: 01转换法_java改变后的c++改进版

    http://blog.csdn.net/canguanxihu/article/details/46363375 排列组合算法之一: 01转换法_java改变后的c++版 class ZuheAss ...

  5. python写排列组合_Python实现的简单排列组合算法示例

    本文实例讲述了Python实现的简单排列组合算法.分享给大家供大家参考,具体如下: 1.python语言简单.方便,其内部可以快速实现排列组合算法,下面做简单介绍 2.一个列表数据任意组合 主要是利用 ...

  6. java 获取排列组合_Java获得一个数组的指定长度排列组合算法示例

    本文实例讲述了Java获得一个数组的指定长度排列组合算法.分享给大家供大家参考,具体如下: package demo; import java.util.Stack; /** * JAVA获得一个数组 ...

  7. js排列组合算法解决方案

    之前文章中谈过排列组合算法,主要事递归,代码如下 const arrangeCombination = arr => {const res = [], len = arr.length, inn ...

  8. C#语法灵活运用之排列组合算法

    今天群里有朋友求一个排列组合算法,题目是给定长度,输出所有指定字母的组合. 如指定字母a.b.c.d.e.f,长度为2,则结果应为:aa.ab.ac ... ef.ff. 有朋友给出算法,很有特色: ...

  9. js实现排列组合算法N选M

    JavaScript 从一个数组中拿出N个数(可放回),问共有多少种 今天在写一道leetcode的时候遇到了无重复放回的遍历问题,用递归解决如下: function p(arr, N, ans){i ...

  10. python 排列组合算法_基于python快速实现排列组合算法

    1.python语言简单.方便,其内部可以快速实现排列组合算法,下面做简单介绍. 2.一个列表数据任意组合 2.1主要是利用自带的库#_*_ coding:utf-8 _*_ #__author__= ...

最新文章

  1. 这个外挂要上天了!教一千遍都不会的数理技巧,还不如搞懂最根本的概念!
  2. C语言库函数大全及应用实例四
  3. 我的世界java1如何安装mod_《我的世界》【教程】如何安装MOD【PC】
  4. 51单片机入门教程(6)——外部中断
  5. arm平台下的反汇编pdf_stm32逆向与安全科普,bin文件逆向反汇编
  6. VB 用zint 库生成PDF417及其他条码
  7. 自由软件运动与GNU项目
  8. java cryptojs_CryptoJS用法
  9. 在Mac上修改jupyter默认地址
  10. 企业消息转发服务器,Python构建企业微信自动消息转发服务端
  11. 迷宫中离入口最近的出口问题
  12. 雪球网爬取上市公司信息(一):爬取上市公司代号
  13. 详解java人力外包的费用组成
  14. Kibana KQL查询语法
  15. 九月四号《算法笔记》学习
  16. 小白尝试c++编写飞机大战
  17. 【ubuntu_problems】搜狗输入法打字没有候选项
  18. 基于模糊PID控制的电加热炉温度控制系统设计
  19. ps 2021未经正确签署终极解决办法
  20. MFC中的Create();函数

热门文章

  1. 爱立顺m33+android+4.4.2,更美丽更流畅 爱立顺M33升级Android 4.4.2
  2. php 横杠箭头,为什么我的箭头下面有一横线?
  3. mysql 函数 截取,MySQL 字符串函数:字符串截取
  4. scapy爬虫-Url去重
  5. 微信中直接打开手机系统浏览器的实现
  6. 华为助力“沙漠奇迹”成为高密互联的高尔夫球场
  7. ccpcfinal总结
  8. python不同目录下的调用
  9. Itext 中的文本信息绝对定位
  10. 红旗liuxe5.0下vmware tools安装记录