题目

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。

问总共有多少条不同的路径?

思路

回溯:能够实现,不断向右或者向下,但是效率过低,无法通过

动态规划:

令 dp[i][j] 是到达 i, j 最多路径,因此动态方程为dp[i][j] = dp[i-1][j] + dp[i][j-1],其中第一行 dp[0][j]和第一列 dp[i][0],在边界,所以其值只能为 1、

进一步优化:每一格的值只与上一行有关,因此我们只要维护一行的值即可

实现

回溯:

class Solution:
def uniquePaths(self, m: int, n: int) -> int:
result = 0
def step(x,y):
if x < m-1:
step(x+1,y)
if y < n-1:
step(x,y+1)
if x == m -1 and y == n-1:
nonlocal result
result += 1
step(0,0)
return result

动态规划:

class Solution:
def uniquePaths(self, m: int, n: int) -> int:
matrix = [[0 for i in range(n)] for j in range(m)]
for k in range(m):
for j in range(n):
if k < 1:
matrix[k][j] = 1
elif j < 1:
matrix[k][j] = 1
else:
matrix[k][j] = matrix[k-1][j] + matrix[k][j-1]
return matrix[m-1][n-1]

优化:

class Solution:
def uniquePaths(self, m: int, n: int) -> int:
matrix = [1 for i in range(n)]
for k in range(1,m):
for j in range(1,n):
matrix[j] += matrix[j-1]
return matrix[n-1]

leetcode刷题-62不同路径的更多相关文章

  1. leetcode刷题-62不同路径2

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

  2. leetcode刷题-64最小路径和

    题目 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入:[  [1,3,1],  [1,5, ...

  3. LeetCode刷题笔记-递归-路径总和

    题目描述: 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和. 说明: 叶子节点是指没有子节点的节点. 示例: 给定如下二叉树,以及目标和 su ...

  4. leetcode刷题-71简化路径

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

  5. Leetcode刷题6—不同路径

    一.要求 二.知识点 这道题属于动态规划,主要思路就是将大问题不断分解成小问题进行求解 三.解题思路 1.利用数学思路找规律 将m和n组合成一个m*n的矩阵,而且是一个对称阵 [[0],[1],[1] ...

  6. C#LeetCode刷题-动态规划

    动态规划篇 # 题名 刷题 通过率 难度 5 最长回文子串   22.4% 中等 10 正则表达式匹配   18.8% 困难 32 最长有效括号   23.3% 困难 44 通配符匹配   17.7% ...

  7. C#LeetCode刷题-字符串

    字符串篇 # 题名 刷题 通过率 难度 3 无重复字符的最长子串   24.6% 中等 5 最长回文子串   22.4% 中等 6 Z字形变换   35.8% 中等 8 字符串转整数 (atoi)   ...

  8. C#LeetCode刷题-数组

    数组篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 43.1% 简单 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组 ...

  9. LeetCode刷题总结-数组篇(中)

    本文接着上一篇文章<LeetCode刷题总结-数组篇(上)>,继续讲第二个常考问题:矩阵问题. 矩阵也可以称为二维数组.在LeetCode相关习题中,作者总结发现主要考点有:矩阵元素的遍历 ...

随机推荐

  1. 微信小程序之回到顶部的两种方式

    第一种:使用view标签形式回到顶部 WXML: <image src='../../img/button-top.png' class='goTop' hidden='{{!floorstat ...

  2. 安装黑苹果MoJave记录

    说实话安装黑苹果并不是一件很简单的事情,它既费时,而且还需要一定的计算机知识,最重要的是对于你来说可能黑苹果并没有Linux或者Windows好用. 好了废话不多说,开始吧. 1.硬件准备 并不是什么 ...

  3. L1-006 连续因子 天梯

    思路: 素数只有1和本身 合数 暴力枚举 把连续因子最大的记录下来 注意: AC代码 //思路: //素数只有1和本身 //合数 暴力枚举 把连续因子最大的记录下来 #include<iostr ...

  4. Angular Datatable的一些问题

    这几天改bug中发现的一些问题,小结一下.从简单到复杂逐个讲. angular datatable实质上是对jquery库的包装,但包装后不太好用,定制功能比较麻烦. 1. 基本用法 最简单的用法,大 ...

  5. 基础知识、DOS命令

    一.信息安全 1.信息源认证   https 访问控制   ACL   :不能有非法软件驻留   :不能含有未授权的操作等 2.2017-OWASP-TOP5 注入  :失效的身份认证和回话配置 :跨 ...

  6. 完全基于 Java 的开源深度学习平台,亚马逊的大佬带你上手

    本文适合有 Java 基础的人群 作者:DJL-Lanking HelloGitHub 推出的<讲解开源项目>系列.有幸邀请到了亚马逊 + Apache 的工程师:Lanking( htt ...

  7. 直播报名 | 8.29 Kylin Meetup – 来聊聊云原生

    云原生的巨浪正在席卷全球的软件产业,包括开源和商业软件.Apache Kylin 正在为此而积极准备着:基于新的计算和存储引擎,即将发布的 Kylin 4.0 将实现真正的计算和存储分离,减小运维难度 ...

  8. 【接口自动化】Python+Requests接口自动化测试框架搭建【二】

    接续前文,在上篇博客中我们编写了demo.py代码,里面代码过多冗余,更新代码: #!/usr/bin/env python # coding=utf-8 import requests class ...

  9. Magento1.9 add attribute to catalog product & assign to all attribute set general group

    $installer = $this; $attributes = array( 'region' => array( 'type' => 'int', 'input' => 'se ...

  10. elaticsearch