一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角。问总共有多少条不同的路径?

示例 1:

输入: m = 3, n = 2
输出: 3
解释:
从左上角开始,总共有 3 条路径可以到达右下角。
1. 向右 -> 向右 -> 向下
2. 向右 -> 向下 -> 向右
3. 向下 -> 向右 -> 向右

示例 2:

输入: m = 7, n = 3
输出: 28

分析:m表示列,n表示行

以示例2举例

1 1 1 1 1 1 1
1 2 3 4 5 6 7
1 3 6 10 15 21 18

解法一:用一个n * m的二维数组result来表示上表中元素,其中result[i][j]表示从原点出发到达第i行,第j列的路径总数

class Solution(object):
def uniquePaths(self, m, n):
"""
:type m: int
:type n: int
:rtype: int
"""
result = [[0 for i in range(m)] for j in range(n)]
#用0初始化二维数组
for i in range(m):
result[0][i] = 1
#第一行元素全为1,只有一条路径,从原点一直往右走
for j in range(n):
result[j][0] = 1
#第一列元素全为1,只有一条路径,从原点一直往下走
for i in range(1,n):
for j in range(1,m):
result[i][j] = result[i][j-1] + result[i-1][j]
#除第一行第一列,其余所有点的值由前一行同一列加前一列同一行所得
return result[n-1][m-1]

解法二:和解法一思路相同,只是用两个一维数组来表示,解法一的空间复杂度为O(n * m)解法二的空间复杂度为O(2 * m)当然也可以换为O(2 * n)

class Solution(object):
def uniquePaths(self, m, n):
"""
:type m: int
:type n: int
:rtype: int
"""
pre = [1] * m
#初始化第一行
for i in range(n-1):
last = [1] + [0] * (m-1)
#初始化第二行
for j in range(1,m):
last[j] = last[j-1] + pre[j]
pre = last
#将后一行的值赋给钱一行
return pre[-1]

解法三:总需要走(m + n - 2)步,其中(m -1)步向右,(n-1)步向下,是一个排列组合问题

    def uniquePaths(self, m, n):
"""
:type m: int
:type n: int
:rtype: int
"""
t = m + n - 2
down = 1
#分子
up =1
#分母
for i in range(1,n):
down *= i
up *= t
t -= 1
return up//down

LeetCode 62 不同路径的更多相关文章

  1. Java实现 LeetCode 62 不同路径

    62. 不同路径 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中 ...

  2. LeetCode.62——不同路径

    问题描述: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为 ...

  3. LeetCode 62.不同路径(C++)

    一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为“Finish”). 问总共有多 ...

  4. [LeetCode] 62. 不同路径 ☆☆☆(动态规划)

    动态规划该如何优化 描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为“Fi ...

  5. leetcode 62. 不同路径(C++)

    一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为“Finish”). 问总共有多 ...

  6. Leetcode之动态规划(DP)专题-62. 不同路径(Unique Paths)

    Leetcode之动态规划(DP)专题-62. 不同路径(Unique Paths) 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” ). 机器人每次只能向下或者向 ...

  7. LeetCode 64. 最小路径和(Minimum Path Sum) 20

    64. 最小路径和 64. Minimum Path Sum 题目描述 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明: 每次只能向下或 ...

  8. LeetCode:简化路径【71】

    LeetCode:简化路径[71] 题解参考天码营:https://www.tianmaying.com/tutorial/LC71 题目描述 给定一个文档 (Unix-style) 的完全路径,请进 ...

  9. LeetCode 71.简化路径

    LeetCode 71.简化路径 题目描述: 以 Unix 风格给出一个文件的绝对路径,你需要简化它.或者换句话说,将其转换为规范路径.在 Unix 风格的文件系统中,一个点(.)表示当前目录本身:此 ...

随机推荐

  1. linux 命令——13 less(转)

    less 工 具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大.less 的用法比起 more 更加的有弹性. 在 more 的时候,我们并没有办法向前 ...

  2. java中list强转为map类型

    起因:读取数据库文件的测试用例,测试用例需要存放到一个map中,方便下次调用, 读取的内容返回的内容存放在一个list中,并且数据内容是key=value的形式,最开始使用切片方式,做了很多无用功,后 ...

  3. World Wind Java开发之十一——加载热点信息(仿Google Earth)(转)

    在GE的图层中有一个照片图层,在浏览时可以看到各地的一些图片,我们称之为热点信息,如下图所示: 再来看下本文的实现效果: 效果是不是很像呢,其实实现这个很简单,参照examples中的Balloons ...

  4. os.walk 模块

    os.walk()可以得到一个三元tupple(dirpath, dirnames, filenames),其中第一个为起始路径,第二个为起始路径下的文件夹,第三个是起始路径下的文件. 其中dirpa ...

  5. install ipython-notebook

    http://it.010lm.com/os/LINUX/182036.html ipython[notebook]安装(Linux平台) 1. 环境 操作系统:ubuntukylin 2. 操作步骤 ...

  6. eclipse关闭无用启动项,降低内存占用

    1,我使用的eclipse版本 2.打开windows-->preference 3,勾选掉无用的启动项,我的已经去掉过了, 4,重启eclipse,如果操作后导致一些必须的功能不能用了,可以点 ...

  7. Java程序调用自动关机指令 1分钟内自动关机

    package com.swift;//可以不要这句 import java.io.IOException; public class Shutdown100 { public static void ...

  8. vue的属性监听

    一.vue的监听 1.监听的例子 如: html:<input type="number" v-model="a" /> js: watch: { ...

  9. centos下安装mariadb

    前言 一直都是前端,比较少玩服务器,最近买了阿里云,开始尝试centos,不得不说linux还是很有魅力的. 正文 google了一圈,决定安装mariadb,其实mariadb和mysql差不多,使 ...

  10. select函数实例代码

    select函数简解: selct 称之为多路复用IO,使用它可以让程序阻塞在select上,而非实际IO函数上. int select(int nfds, fd_set *readfds, fd_s ...