很经典的一道题

等同于:https://leetcode-cn.com/problems/unique-paths/

在完美世界面试中遇到了。

每次都只能向右或者向下走,求出所有种情况。

当时想到的思路是这样的。

dp[m][n]=dp[m-1][n]+dp[m][n-1]表示走到(m,n)位置的走法

给的题干是:

class Solution {public int uniquePaths(int m, int n) {}
}

这道题求有多少种路径?那么理应当想到动态规划。

我们令 dp[i][j] 是到达 i, j 最多路径

动态方程:dp[i][j] = dp[i-1][j] + dp[i][j-1]

跟上面公式是一样的。

对于第一行 dp[0][j],或者第一列 dp[i][0],由于都是在边界,所以只能为 1

时间复杂度:O(m*n)

空间复杂度:O(m * n)

这是:
作者:powcai
链接:https://leetcode-cn.com/problems/unique-paths/solution/dong-tai-gui-hua-by-powcai-2/

因为如果i=0的情况,路径肯定都是1

class Solution {public int uniquePaths(int m, int n) {//dp[i][j] 是到达 i, j 最多路径//但是为什么i= 0的时候 都要弄成1呢?//因为这是初始化过程最左边和最上面的都是1int[][] dp = new int[m][n];for (int i = 0; i < n; i++) dp[0][i] = 1;for (int i = 0; i < m; i++) dp[i][0] = 1;for (int i = 1; i < m; i++) {for (int j = 1; j < n; j++) {dp[i][j] = dp[i - 1][j] + dp[i][j - 1];}}return dp[m - 1][n - 1];}
}

优化1:

优化一:由于dp[i][j] = dp[i-1][j] + dp[i][j-1],因此只需要保留当前行与上一行的数据 (在动态方程中,即pre[j] = dp[i-1][j]),两行,空间复杂度O(2n);

其实就是:

当前的状态只跟上一行的状态和同一行左边的状态有关。所以我们只需要维护上一行的数组,和当前行的数组

那么pre就是上一行的状态(整行)

cur就是当前行整行的状态

nb!

class Solution {public int uniquePaths(int m, int n) {//上一行数据int[] pre = new int[n];int[] cur = new int[n];//初始化把所有的值都填成1Arrays.fill(pre, 1);Arrays.fill(cur,1);for (int i = 1; i < m;i++){for (int j = 1; j < n; j++){cur[j] = cur[j-1] + pre[j];}pre = cur.clone();}return pre[n-1]; }
}

优化二:

cur[j] += cur[j-1], 即cur[j] = cur[j] + cur[j-1]

等价于思路二-->> cur[j] = pre[j] + cur[j-1]

因此空间复杂度为O(n).

class Solution {public int uniquePaths(int m, int n) {int[] cur = new int[n];Arrays.fill(cur,1);for (int i = 1; i < m;i++){for (int j = 1; j < n; j++){cur[j] += cur[j-1] ;}}return cur[n-1];}
}

[算法]给定一个矩阵m*n,从左上角开始每次只能向右或者向下走,最后到右下角的位置共有多少种路径相关推荐

  1. 给定一个矩阵m,从左上角开始每次只能向右走或者向下走,最后达到右下角的位置

    /*  * 给定一个矩阵m,从左上角开始每次只能向右走或者向下走,最后达到右下角的位置,  * 路径中所有数字累加起来就是路径和,返回所有路径的最小路径和,如果给定的m如下,那么路径1,3,1,0,6 ...

  2. 给定一个矩阵m*n,从左上角开始每次只能向右或者向下走,最后到右下角的位置共有多少种路径

    题目描述 给定一个矩阵m*n,从左上角开始每次只能向右或者向下走,最后到右下角的位置,路径上所有的数字累加起来就是路径和,返回所有的路径中最小的路径和. 思路: 1.排列组合 要从A到B,必须向左走6 ...

  3. [分支限界]给定一个矩阵m*n,从左上角开始每次只能向右或者向下走,最后到右下角的位置共有多少种路径

    分支限界解最短路径 问题描述: 要求: 随机数算法 分支限界算法 程序源码 问题描述: 给定一个m行n列的矩阵,从左上角开始每次只能向右或向下移动,最后到达右下角的位置,路径上的所有数字累加起来作为这 ...

  4. 给定一个矩阵m*n,从左上角开始每次只能向右和向下走,最后到右下角的位置共有多少种路径。

    #include <bits/stdc++.h> using namespace std; /*    每次只能向右或向下走    dp[m][n] = dp[m-1][n]+dp[m][ ...

  5. 请编写一个函数,计算n*m的棋盘格子(n为横向的格子数,m为竖向的格子数)沿着各自边缘线从左上角走到右下角,总共有多少种走法,要求不能走回头路,即:只能往右和向下走,不能往左和往上走。

    请编写一个函数,计算n*m的棋盘格子(n为横向的格子数,m为竖向的格子数)沿着各自边缘线从左上角走到右下角,总共有多少种走法,要求不能走回头路,即:只能往右和向下走,不能往左和往上走. 递归实现: # ...

  6. M×N的矩阵,从左上角走,只能向右或者向下走,要求走过的每个元素的值加起来的和最大,步数不限

    题目描述 M×N的矩阵,从左上角走,只能向右或者向下走,要求走过的每个元素的值加起来的和最大,步数不限 代码实现 import numpy as np def max_way(a,m,n):dp=[[ ...

  7. 一个m * n的网格,从最左上角出发,每次只能向右或者向下移动一格,问有多少种不同的方法可以到达最右下角的格子

    格子路径 题目: 在一个 2×2 的栅格中,从左上角出来,只能向右或向下移动,总共有 6 条路径可以到达栅格的右下角: 求m*n的网格中,有多少条移动路径? 以一个 20×20 的栅格为例,它有137 ...

  8. 算法-给定一个字符串S = “I am a student. “,则输出“student. a am I“。

    题目描述 反转单词顺序: 给定一个字符串S = "I am a student. ",则输出"student. a am I". 算法实现 public sta ...

  9. 算法---给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合

    题目 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合.答案可以按 任意顺序 返回.给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母.示例 1:输入:digits ...

最新文章

  1. python识别latex公式_Python代码转Latex公式,这个开源库用一行代码帮你搞定
  2. 看到他我一下子就悟了-- Lambda表达式
  3. python两个数相加时_怎么用python让两个小数相加
  4. HTML5语义化的理解
  5. Linux下MySQL忘记root密码及解决办法
  6. 关得紧紧的 FreeEIM飞鸽传书
  7. IDEA如何删除无用war包
  8. Keras-6 IMDB, a binary classification example
  9. 前端常用插件、工具类库汇总,新手必收藏!!!
  10. Unable to round-trip http request to upstream: EOF问题
  11. 数据结构与算法之-----图(基本概念)
  12. Idea:新版本Idea底部工具栏Git中没有Local Changes
  13. 细嚼浏览器兼容----条件注释判断浏览器版本
  14. [na]802.1x协议无线认证协议dot1x有线认证实验
  15. 拆与组装计算机的全过程,拆装及组装电脑方法
  16. Zabbix 报告缺少可用的交换空间主机 “Lack of free swap space”问题解决
  17. Java调用用户芝麻信用分
  18. 关于站内信的开发思路
  19. WebRTC语音对讲无声音
  20. 关于QQ截图中马赛克处理的想法

热门文章

  1. C++版本 26:字符串最大跨距
  2. 盘点丨无人机与AI 深度融合及跨域应用
  3. 被一个gpio口搞死的一天
  4. python开发3d游戏renpy_【图片】从0开始学用Python做游戏的全过程【精品贴】(不定期更新)【python吧】_百度贴吧...
  5. ShareTechnote系列LTE(8):小区搜索
  6. JavaScript验证字符串中是否含有中文汉字
  7. flex布局水平垂直居中
  8. C++一行一行的读文件
  9. 一年不见,基情未减——桂林电子科技大学一日游
  10. python文字转语音女声_python文字转语音