当前位置: 首页 > news >正文

介休做网站龙采网站建设

介休做网站,龙采网站建设,wordpress4.4.2,seo推广排名题目:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff0…

题目:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

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

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

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

分析:

假设为3行2列的二维数组

1. 向右---向下---向下

2. 向下---向下---向右

3. 向下--向右---向下

可以推导

1. 一直向右和一直向下,每种走法只有1种走法,没有其他可以旋转的空间。因此

11
12
1

2 、那么到达dp[1][1] 的走法就是 1 + 1 = 2;

3. 那么到达右下角dp[2][1] 就是 2 + 1 = 3; 即3种走法

分析2:

假设有3行7列

1. 按行走,只有1种走法

2、按列走,只有一种走法,可得

1111111
1
1

那么dp[1][1] 就是 dp[0][1] + dp[1][0] 即 1+ 1 = 2;依次类推可得

1111111
1234567
1

第三行还是按照这种方式推导,可得

1111111
1234567
13610152128

因此,针对3行7列的二维数组,可得28种走法

代码实现:

public int uniquePaths(int m, int n) {int[][] dp = new int[m][n];//第一行都为1for (int col = 0; col < n; col++) {dp[0][col] = 1;}//第一列都为1for (int row = 0; row < m; row++) {dp[row][0] = 1;}for (int row = 1; row < m; row++) {for(int col = 1; col < n; col++) {dp[row][col] = dp[row][col - 1] + dp[row - 1][col];}}return dp[m-1][n-1];}

还是一样的问题,以上代码的时间复杂度为O(m*n), 空间复杂度也为O(m*n). 如果100行100列的二维数组,将浪费100*100的空间复杂度。

空间压缩进行优化:

 public int uniquePaths2(int m, int n) {int[] dp = new int[n];//第一行都为1for (int col = 0; col < n; col++) {dp[col] = 1;}for (int row = 1; row < m; row++) {dp[0] = 1;for (int col = 1; col < n; col++) {dp[col] = dp[col -1] + dp[col];}}return dp[n -1];}

完整代码:

package code03.动态规划_07.lesson4;//力扣62题
// https://leetcode.cn/problems/unique-paths/description/
public class DiffPathSum_02 {public int uniquePaths(int m, int n) {int[][] dp = new int[m][n];//第一行都为1for (int col = 0; col < n; col++) {dp[0][col] = 1;}//第一列都为1for (int row = 0; row < m; row++) {dp[row][0] = 1;}for (int row = 1; row < m; row++) {for(int col = 1; col < n; col++) {dp[row][col] = dp[row][col - 1] + dp[row - 1][col];}}return dp[m-1][n-1];}public int uniquePaths2(int m, int n) {int[] dp = new int[n];//第一行都为1for (int col = 0; col < n; col++) {dp[col] = 1;}for (int row = 1; row < m; row++) {dp[0] = 1;for (int col = 1; col < n; col++) {dp[col] = dp[col -1] + dp[col];}}return dp[n -1];}
}

力扣测试通过:

题目:力扣63题: 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

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

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

现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?

网格中的障碍物和空位置分别用 1 和 0 来表示。

分析:

1. 这一题其实跟上面一体解法相同,唯一的不同之处是有障碍物。

2. 第一行和第一列遇到障碍物,那么后面的路都走不通而已

3. 后面的推导,当前方格为障碍物,设置0代表走不通;如果不为0,则按照原有逻辑进行推导即可

完整代码:

package code03.动态规划_07.lesson4;//力扣63题
// https://leetcode.cn/problems/unique-paths-ii/description/
public class DiffPathSum_03 {//时间复杂度 O(m*n), 空间复杂度 O(m*n)public int uniquePathsWithObstacles(int[][] obstacleGrid) {int m = obstacleGrid.length;int n = obstacleGrid[0].length;//obstacleGrid[0][0] == 1 代表左上角第一个就是障碍物//obstacleGrid[m-1][n-1] == 1 代表右下角最后一个是障碍物if (obstacleGrid == null|| obstacleGrid.length == 0|| obstacleGrid[0][0] == 1|| obstacleGrid[m-1][n-1] == 1) {return 0;}int[][] dp = new int[m][n];//处理第一行dp[0][0] = 1;for (int col = 1; col < n; col++) {//如果当前列为1, 或者前一列为0. 代表遇到障碍物。后面路走不通,全部变为0if (obstacleGrid[0][col] == 1 || dp[0][col -1] == 0) {dp[0][col] = 0;} else {//第一行只有1条路dp[0][col] = 1;}}//处理第一列for (int row = 1; row < m; row++) {//如果当前列为1, 或者上一列为0. 代表遇到障碍物。后面路走不通,全部变为0if (obstacleGrid[row][0] == 1 || dp[row-1][0] == 0) {dp[row][0] = 0;} else {//第一行只有1条路dp[row][0] = 1;}}for (int row = 1; row < m; row++) {for(int col = 1; col < n; col++) {//如果当前列有障碍物,此条路走不通。当前列的值变为0//否则,按照原有的逻辑进行计算dp[row][col] = obstacleGrid[row][col] == 1 ? 0: dp[row][col - 1] + dp[row - 1][col];}}return dp[m-1][n-1];}//空间压缩//时间复杂度 O(m*n), 空间复杂度 O(n)public int uniquePathsWithObstacles2(int[][] obstacleGrid) {int m = obstacleGrid.length;int n = obstacleGrid[0].length;//obstacleGrid[0][0] == 1 代表左上角第一个就是障碍物//obstacleGrid[m-1][n-1] == 1 代表右下角最后一个是障碍物if (obstacleGrid == null|| obstacleGrid.length == 0|| obstacleGrid[0][0] == 1|| obstacleGrid[m-1][n-1] == 1) {return 0;}int[] dp = new int[n];//处理第一行dp[0] = 1;for (int col = 1; col < n; col++) {//如果当前列为1, 或者前一列为0. 代表遇到障碍物。后面路走不通,全部变为0if (obstacleGrid[0][col] == 1 || dp[col -1] == 0) {dp[col] = 0;} else {//第一行只有1条路dp[col] = 1;}}for (int row = 1; row < m; row++) {//当前列为障碍物或者上一列为障碍物,都走不通。dp[0] =  (obstacleGrid[row][0] == 1 || dp[0] == 0) ? 0 : 1;for(int col = 1; col < n; col++) {//如果当前列有障碍物,此条路走不通。当前列的值变为0//否则,按照原有的逻辑进行计算dp[col] = obstacleGrid[row][col] == 1 ? 0 : dp[col -1] + dp[col];}}return dp[n-1];}public static void main(String[] args) {DiffPathSum_03 test = new DiffPathSum_03();int[][] arr = {{0, 0, 0},{0, 1, 0},{0, 0, 0}};System.out.println(test.uniquePathsWithObstacles2(arr));}
}

http://www.yayakq.cn/news/30886/

相关文章:

  • 租房网站wordpress用户注册提醒
  • 模板网站建设服务商vue做网站前台
  • 网站制作的基本电子商务网站建设财务分析
  • 制作网站软件作品wordpress网站怎么建
  • 网站新闻不添加关键词超链接对优化有影响吗深圳比较好的建网站公司
  • 传奇手游发布网站长春仿站定制模板建站
  • 福州网站建设设计公司湖南建设教育网
  • 大理做网站店铺设计合同
  • 上海网站推广服务公司上海专业的网站建设
  • 17网站一起做网店好不好做网站需要用什么系统
  • 做网站平台多少钱深交所大宗交易平台
  • 网站建设 注意事项电商扶贫网站建设
  • 网站开发方案设计做a网站
  • 怎么做网站赚流量罗定城乡建设局网站
  • 中国建设银行招聘信息网站优化大师官网下载
  • 恩施市住房和城乡建设局网站织梦cms侵权
  • 义乌网站建设联系方式wordpress 新建模板文件夹
  • 沈阳网站建设三好街网站建设方案报价单
  • 广西长长路桥建设有限公司网站网络设计公司排名
  • 动易网站管理系统在线ps修图编辑器
  • asp.net电子商务网站前台模板汕头网站建设方案外包
  • 易网站票网站开发品牌seo培训咨询
  • 免费做网站手机网站左侧悬浮导航代码
  • 一站式网站建设与运营网站鼠标的各种效果怎么做的
  • 南京定制网站建设wordpress 源码 分析
  • 常见的办公网网站开发网站怎么做备份
  • 织梦搭建网站免费制作商标
  • 房地产管理网站wordpress做定制T恤的网站
  • 网站登陆模板网站建设需要多大的空间
  • 电子商务网站开发费用入账无锡制作网站价格表