博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【leetcode】63. Unique Paths II 有障碍的棋盘走路路径数量
阅读量:6093 次
发布时间:2019-06-20

本文共 1995 字,大约阅读时间需要 6 分钟。

1. 题目

Follow up for "Unique Paths":

Now consider if some obstacles are added to the grids. How many unique paths would there be?

An obstacle and empty space is marked as 1 and 0 respectively in the grid.

For example,

There is one obstacle in the middle of a 3x3 grid as illustrated below.

[

[0,0,0],
[0,1,0],
[0,0,0]
]
The total number of unique paths is 2.

Note: m and n will be at most 100.

2. 思路

第一遍用递归的方式来计算,当矩阵太大了递归太多超时了。

第二遍改为迭代方案,从右下往左上走,保留每个点[i,j]走到底的路径数量,就可以通过加和得到下一步的大小。复杂度O(m*n)。

3. 代码

耗时:6ms

class Solution {public:    int uniquePathsWithObstacles(vector
>& obstacleGrid) { //return upwo(obstacleGrid, 0, 0); return upwo(obstacleGrid); } // 迭代的方案 // 多加一行一列, 填为0,方便迭代计算. 为了简化最右下的点,将右下的右边点设置为1 int upwo(vector
>& og) { int row = og.size(); if (row == 0) { return 0; } int col = og[0].size(); if (col == 0) { return 0; } if (og[0][0] == 1 || og[row-1][col-1] == 1) { return 0; } int way[row+1][col+1]; for (int i = 0; i < row + 1; i++) { way[i][col] = 0; } for (int j = 0; j < col + 1; j++) { way[row][j] = 0; } way[row-1][col] = 1; for (int i = row-1; i >= 0; i--) { for (int j = col-1; j >= 0; j--) { if (og[i][j] == 1) { way[i][j] = 0; } else { way[i][j] = way[i+1][j] + way[i][j+1]; } } } return way[0][0]; } // 超时的方案 // 用递归的方式来计算 // 每次可以向右和相下两种方向,如果某个方向是1,则此方向的种类是0 int upwo(vector
>& og, int i, int j) { if (og[i][j] == 1) { return 0; } int row = og.size(); if (row == 0) { return 0; } int col = og[0].size(); if (col == 0) { return 0; } if (i == row - 1 && j == col - 1) { return 1; } if (i == row - 1) { return upwo(og, i, j + 1); } if (j == col - 1) { return upwo(og, i + 1, j); } return upwo(og, i, j + 1) + upwo(og, i + 1, j); }};

转载地址:http://aiwza.baihongyu.com/

你可能感兴趣的文章
调试、手机-手游开发知识(三)--NDK联机调试-by小雨
查看>>
嵌入式,代码调试----GDB扫盲
查看>>
类斐波那契数列的奇妙性质
查看>>
配置设置[Django]引入模版之后报错Requested setting TEMPLATE_DEBUG, but settings are not configured....
查看>>
下一步工作分配
查看>>
Response. AppendHeader使用大全及文件下载.net函数使用注意点(转载)
查看>>
Wait Functions
查看>>
代码描述10313 - Pay the Price
查看>>
jQuery最佳实践
查看>>
centos64i386下apache 403没有权限访问。
查看>>
下划线的学习5
查看>>
Spring Data JPA教程, 第六部分: Sorting(未翻译)
查看>>
重建二叉树
查看>>
企业管理软件开发之九 以数据绑定为基础的控件只读,创建时可写,必须大写,必须小写的原理与实现...
查看>>
批处理清理VS工程目录(递归删除Debug, Release, ipch目录及*.sdf文件)
查看>>
在Windows中监视IO性能
查看>>
thrift之TTransport层的缓存传输类TBufferedTransport和缓冲基类TBufferBase
查看>>
Oracle数据库日期范围查询的两种实现方式
查看>>
PHP魔术变量和魔术方法
查看>>
张子强_百度百科
查看>>