动态规划(1)
This commit is contained in:
parent
73993ff8c0
commit
d4a52e012d
@ -1,5 +1,5 @@
|
||||
---
|
||||
title: 动态规划
|
||||
title: 动态规划(1)
|
||||
date: 2018-8-27 02:17:07
|
||||
tags:
|
||||
- 算法
|
||||
@ -59,4 +59,42 @@ class Solution {
|
||||
}
|
||||
```
|
||||
空间复杂度是`O(1)`, 因为使用了常数个变量, 没有开辟长度为n的新数组
|
||||
时间复杂度是`O(n)`, 因为要逐个遍历传入的数组当中的元素
|
||||
时间复杂度是`O(n)`, 因为要逐个遍历传入的数组当中的元素
|
||||
|
||||
### 不同路径问题
|
||||
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )
|
||||
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)
|
||||
问总共有多少条不同的路径?
|
||||

|
||||
|
||||
#### 解决方式
|
||||
1. 首先最左上角的格子的到达方式肯定只有1种, 因为必须要从这个格子开始走
|
||||
2. 在每个格子当中只能向右或者向下移动, 所以每个对于每个格子来说, 到达这个格子的时候, 只能从左侧或者上方到达
|
||||
3. 左边缘的格子无法从左侧到达, 上边缘的格子无法从上方到达
|
||||
|
||||
所以对于每个格子来说, 到达这个格子的路径的数量 = 到达左侧格子的数量 + 到达上方格子的数量
|
||||
左边缘的格子前者为0, 上边缘的格子后者为0
|
||||
|
||||
根据这个原则, 就可以把到达每个格子的路径数量递推出来了
|
||||
|
||||
#### 代码实现
|
||||
```java
|
||||
public int uniquePaths(int m, int n) {
|
||||
if(m<=0 || n<=0) {
|
||||
return 0;
|
||||
}
|
||||
int[][] nums = new int[m+1][n+1];
|
||||
nums[1][1] = 1;
|
||||
for(int i=1 ; i<=m ; i++) {
|
||||
for(int j=1 ; j<=n ; j++) {
|
||||
if(i==1 && j==1) {
|
||||
continue;
|
||||
}
|
||||
nums[i][j] = nums[i-1][j] + nums[i][j-1];
|
||||
}
|
||||
}
|
||||
return nums[m][n];
|
||||
}
|
||||
```
|
||||
整体思路就是创建一个整数二维数组, m+1和n+1是为了留出第一行和第一列数值都是0
|
||||
方便进行计算, 当然这个也不是必须的, 在循环当中判断也可以, 但是不影响时间和空间复杂度
|
||||
BIN
source/images/算法/robot_maze.png
Normal file
BIN
source/images/算法/robot_maze.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.5 KiB |
Loading…
x
Reference in New Issue
Block a user