算法:62唯一路径Unique Paths 动态规划和排列组合算法
62. Unique Paths
A robot is located at the top-left corner of a m x n grid (marked ‘Start’ 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?
Input: m = 7, n = 3
Output: 28
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]。可以看下面的图,
往下走的列path[i][0]都初始化为1,表示一直往下有一种的解法;往右走的行path[0][j]都初始化为1,表示一直往右有一种的解法。
再看第二列,当前位置的记录是由上面的解法,和左边的解法,加起来就是当前的解法。所以 2 = 1 + 1, 3 = 2 + 1. 以此类推。
结果是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 动态规划和排列组合算法相关推荐
- JavaScript实现唯一路径问题的动态编程方法的算法(附完整源码)
JavaScript实现唯一路径问题的动态编程方法的算法(附完整源码) dpUniquePaths.js完整源代码 dpUniquePaths.test.js完整源代码 dpUniquePaths.j ...
- 排列 组合 算法(一)
排列组合算法 我们都知道排列与组合的个数可以利用公式很容易的求出来,但是要是把这些排列组合的序列一一输出怎么办呢? 下面结合<组合数学>(第四版)卢开澄卢华明编著,好好总结排列与组合的算法 ...
- python 排列组合速度_Python实现的简单排列组合算法示例
本文实例讲述了Python实现的简单排列组合算法.分享给大家供大家参考,具体如下: 1.python语言简单.方便,其内部可以快速实现排列组合算法,下面做简单介绍 2.一个列表数据任意组合 主要是利用 ...
- 排列组合算法之二: 01转换法_java改变后的c++改进版
http://blog.csdn.net/canguanxihu/article/details/46363375 排列组合算法之一: 01转换法_java改变后的c++版 class ZuheAss ...
- python写排列组合_Python实现的简单排列组合算法示例
本文实例讲述了Python实现的简单排列组合算法.分享给大家供大家参考,具体如下: 1.python语言简单.方便,其内部可以快速实现排列组合算法,下面做简单介绍 2.一个列表数据任意组合 主要是利用 ...
- java 获取排列组合_Java获得一个数组的指定长度排列组合算法示例
本文实例讲述了Java获得一个数组的指定长度排列组合算法.分享给大家供大家参考,具体如下: package demo; import java.util.Stack; /** * JAVA获得一个数组 ...
- js排列组合算法解决方案
之前文章中谈过排列组合算法,主要事递归,代码如下 const arrangeCombination = arr => {const res = [], len = arr.length, inn ...
- C#语法灵活运用之排列组合算法
今天群里有朋友求一个排列组合算法,题目是给定长度,输出所有指定字母的组合. 如指定字母a.b.c.d.e.f,长度为2,则结果应为:aa.ab.ac ... ef.ff. 有朋友给出算法,很有特色: ...
- js实现排列组合算法N选M
JavaScript 从一个数组中拿出N个数(可放回),问共有多少种 今天在写一道leetcode的时候遇到了无重复放回的遍历问题,用递归解决如下: function p(arr, N, ans){i ...
- python 排列组合算法_基于python快速实现排列组合算法
1.python语言简单.方便,其内部可以快速实现排列组合算法,下面做简单介绍. 2.一个列表数据任意组合 2.1主要是利用自带的库#_*_ coding:utf-8 _*_ #__author__= ...
最新文章
- 这个外挂要上天了!教一千遍都不会的数理技巧,还不如搞懂最根本的概念!
- C语言库函数大全及应用实例四
- 我的世界java1如何安装mod_《我的世界》【教程】如何安装MOD【PC】
- 51单片机入门教程(6)——外部中断
- arm平台下的反汇编pdf_stm32逆向与安全科普,bin文件逆向反汇编
- VB 用zint 库生成PDF417及其他条码
- 自由软件运动与GNU项目
- java cryptojs_CryptoJS用法
- 在Mac上修改jupyter默认地址
- 企业消息转发服务器,Python构建企业微信自动消息转发服务端
- 迷宫中离入口最近的出口问题
- 雪球网爬取上市公司信息(一):爬取上市公司代号
- 详解java人力外包的费用组成
- Kibana KQL查询语法
- 九月四号《算法笔记》学习
- 小白尝试c++编写飞机大战
- 【ubuntu_problems】搜狗输入法打字没有候选项
- 基于模糊PID控制的电加热炉温度控制系统设计
- ps 2021未经正确签署终极解决办法
- MFC中的Create();函数
热门文章
- 爱立顺m33+android+4.4.2,更美丽更流畅 爱立顺M33升级Android 4.4.2
- php 横杠箭头,为什么我的箭头下面有一横线?
- mysql 函数 截取,MySQL 字符串函数:字符串截取
- scapy爬虫-Url去重
- 微信中直接打开手机系统浏览器的实现
- 华为助力“沙漠奇迹”成为高密互联的高尔夫球场
- ccpcfinal总结
- python不同目录下的调用
- Itext 中的文本信息绝对定位
- 红旗liuxe5.0下vmware tools安装记录