UniquePaths:给定m*n矩阵,从(0,0)到(m-1,n-1)路径条数。只能向下向右走。

算法分析:这和爬楼梯问题很像,到(m,n)的路径数是到(m-1,n)和(m,n-1)路径和。第一行,第一列,为边界条件。

public class UniquePaths
{
//动态规划,非递归
public int uniquePaths(int m, int n)
{
int[][] a = new int[m][n];
for(int i = 0; i < m; i ++)//初始条件,第一行第一列
{
a[i][0] = 1;
}
for(int i = 0; i < n; i ++)
{
a[0][i] = 1;
}
for(int i = 1; i < m; i ++)
{
for(int j = 1; j < n; j ++)
{
a[i][j] = a[i-1][j]+a[i][j-1];//递推公式
}
}
return a[m-1][n-1];
} //动态规划递归
public int uniquePaths2(int m, int n)
{
if(m == 1 || n == 1) return 1;
else
{
return uniquePaths2(m-1, n)+uniquePaths2(m, n-1);
}
}
}

UniquePaths2:在上一题基础上,矩阵为1的点是障碍。求路径数。

public class UniquePaths2
{
public int uniquePathsWithObstacles(int[][] obstacleGrid)
{
int m = obstacleGrid.length;
int n = obstacleGrid[0].length;
if(obstacleGrid[0][0] == 1 || obstacleGrid[m-1][n-1] == 1)//特例
{
return 0;
}
for(int i = 0; i < m; i ++)//边界条件,第一行第一列,如果碰到1,则后面所有都为0
{
if(obstacleGrid[i][0] == 1)
{
for(int j = i; j < m; j ++)
{
obstacleGrid[j][0] = 0;
}
break;
}
else
{
obstacleGrid[i][0] = 1;
}
}
for(int i = 1; i < n; i ++)
{
if(obstacleGrid[0][i] == 1)
{
for(int j = i; j < n; j ++)
{
obstacleGrid[0][j] = 0;
}
break;
}
else
{
obstacleGrid[0][i] = 1;
}
} for(int i = 1; i < m; i ++)
{
for(int j = 1; j < n; j ++)
{
if(obstacleGrid[i][j] == 1)
{
obstacleGrid[i][j] = 0;
}
else
{
obstacleGrid[i][j] = obstacleGrid[i-1][j] + obstacleGrid[i][j-1];
}
}
}
return obstacleGrid[m-1][n-1];
}
}

最新文章

  1. 3. Builder(建造者)
  2. Nginx图片剪裁模块探究 http_image_filter_module
  3. RedHat7 部署ELK日志分析系统
  4. Eclipse中user library包管理
  5. e3.tree参考手册
  6. 网站相关人员信息记录humans.txt
  7. Python函数篇(二)之递归函数、匿名函数及高阶函数
  8. oracle中nvarchar2查询结果显示总是少一位
  9. 【汤鸿鑫 3D太极】5年目标规划(基本功、套路、实战搏击)
  10. nginx介绍 - 部署到linux中
  11. centos6下安装opencv3
  12. CSS 的 ID 和 Class 有什么区别,如何正确使用它们。
  13. DM6467开发领航-开发坏境安装
  14. Unreal Engine 4 笔记
  15. es索引的RestHighLevelClient实现
  16. 是否升级IOS11?IOS11不支持32位程序 查看手机哪些APP不支持
  17. Mysql中datetime和timestamp区别
  18. 使用XWAF框架(3)——下载文件
  19. 版本控制工具(下)——Git的远程仓库、分支管理与其它操作
  20. RxSwift 系列(五)

热门文章

  1. QQ能上,网页打不开
  2. Scala学习之For、Function、Lazy(4)
  3. settings配置与model优化
  4. pytho创建二维码简单版
  5. PyMongo和MongoEngine
  6. (转)live555在Linux下最简单地实现实时流媒体点播
  7. Nothing is impossible
  8. HTTP状态码集
  9. UTC和时间相互转换
  10. 第六课 GDB调试 (上)