Skip to content

Commit e58ba78

Browse files
提交题70爬楼梯1解,更新NOTE内容
1 parent 0336fed commit e58ba78

2 files changed

Lines changed: 69 additions & 1 deletion

File tree

Week_04/id_18/LeetCode_70_18.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package Week_04.id_18;
2+
3+
/**
4+
* @author LiveForExperience
5+
* @date 2019/6/27 17:48
6+
*/
7+
public class LeetCode_70_18 {
8+
public int climbStairs(int n) {
9+
return climbStairs(n, new int[n + 1]);
10+
}
11+
12+
private int climbStairs(int n, int[] nums) {
13+
if (n <= 2) {
14+
return n;
15+
}
16+
17+
if (nums[n] > 0) {
18+
return nums[n];
19+
}
20+
21+
int num = climbStairs(n - 1, nums) + climbStairs(n - 2, nums);
22+
nums[n] = num;
23+
24+
return num;
25+
}
26+
}

Week_04/id_18/NOTE.md

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -440,4 +440,46 @@ class Solution {
440440
}
441441
```
442442
### 收获
443-
熟悉和练习了回溯算法
443+
熟悉和练习了回溯算法
444+
## LeetCode_70_爬楼梯
445+
### 题目
446+
447+
### 失败解法
448+
#### 思路
449+
使用递归的方法,和之前做的一个求斐波那契数列的题目类似,代码和思路都很直观、简单,但超时了。
450+
时间复杂度:O(2^n)
451+
#### 代码
452+
```java
453+
class Solution {
454+
public int climbStairs(int n) {
455+
return n <= 2 ? n : climbStairs(n - 1) + climbStairs(n - 2);
456+
}
457+
}
458+
```
459+
### 解法一
460+
#### 思路
461+
求助国内站的官方解法二,其对解法一(思路和我的失败解法类似)进行了优化,用到了记忆化递归。因为每次下钻的过程中,会有重复的步数,把已经计算过的部署放在数组里记录,就可以省去很多的步骤。
462+
#### 代码
463+
```java
464+
class Solution {
465+
public int climbStairs(int n) {
466+
return climbStairs(n, new int[n + 1]);
467+
}
468+
469+
private int climbStairs(int n, int[] nums) {
470+
if (n <= 2) {
471+
return n;
472+
}
473+
474+
if (nums[n] > 0) {
475+
return nums[n];
476+
}
477+
478+
int num = climbStairs(n - 1, nums) + climbStairs(n - 2, nums);
479+
nums[n] = num;
480+
481+
return num;
482+
}
483+
}
484+
```
485+
### 收获

0 commit comments

Comments
 (0)