62. Unique Paths

方法一: 二位数组

而这道题是每次可以向下走或者向右走,求到达最右下角的所有不同走法的个数。那么跟爬梯子问题一样,需要用动态规划 Dynamic Programming 来解,可以维护一个二维数组 dp,其中 dp[i][j] 表示到当前位置不同的走法的个数,然后可以得到状态转移方程为:  dp[i][j] = dp[i - 1][j] + dp[i][j - 1]

class Solution {
public int uniquePaths(int m, int n) {
int[][] result = new int[m][n];
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
if(i == 0 || j == 0)
result[i][j] = 1;
else
result[i][j] = result[i - 1][j] + result[i][j - 1];
}
}
return result[m - 1][n - 1];
}
}

方法二:

为了节省空间,实际上我们只需要记录遍历到(i, j)这个位置的时候当前行有几种路径,如果遍历到(i, m-1)的时候,替换掉这一行对应列的路径即可,于是状态转移方程编程:
dp[j] = dp[j] + dp[j-1]

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

63. Unique Paths II

如果有障碍,则dp[j] = 0;

class Solution {
public int uniquePathsWithObstacles(int[][] obstacleGrid) {
int width = obstacleGrid[0].length;
int[] dp = new int[width];
dp[0] = 1;
for(int[] row : obstacleGrid){
for(int j = 0; j < width; j++){
if(row[j] == 1)
dp[j] = 0;
else if(j > 0)
dp[j] += dp[j - 1];
}
}
return dp[width - 1];
}
}

最新文章

  1. LR12.53—第6课:运行负载测试
  2. imageserver
  3. javascript 之Object内置对象
  4. 20145206邹京儒《Java程序设计》第2周学习总结
  5. 状态图 Statechart Diagram
  6. mysql创建数据库(指定编码)
  7. VI中的批量替换 (转载)
  8. codeigniter 去除index.php (nginx,apache) 通用方法
  9. hihocoder #1159 : 扑克牌
  10. JVM中的垃圾回收器及垃圾收集算法描述
  11. 三大前端框架(react、vue、angular2+)父子组件通信总结
  12. Windows Server 2003 添加“Resin”到“服务”出错
  13. linux中ping带时间及打印内容到文件
  14. 使用sshfs将远程目录挂载到本地
  15. SQL 数据快速查询优化小技巧(仅供参考)
  16. Windows 安装补丁的另外一种方法
  17. day5_函数_判断小数
  18. jinjia
  19. springmvc elf8848
  20. 《Java程序设计》课堂实践内容总结

热门文章

  1. LeetCode 328:奇偶链表 Odd Even Linked List
  2. python threading ThreadPoolExecutor源码解析
  3. SpringCloud之Eureka详细的配置
  4. 从零到一手写基于Redis的分布式锁框架
  5. Docker Hub镜像加速器
  6. Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder &#39;jdbc.username&#39; in string value &quot;${jdbc.username}&quot;
  7. JavaScript的闭包特性如何给循环中的对象添加事件(一)
  8. tf.reduce_sum() and tf.where()的用法
  9. java socket通信:聊天器(1)
  10. BUUCTF 随便注