递归三要素:
1)一个问题的解可以分解好几个子问题的解;
2)这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一致;
3)存在基线/终止条件;

面试算法题目

1、Leetcode70 爬楼梯

70. 爬楼梯

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
实例:输入:n = 3
输出:3
解释:有三种方法可以爬到楼顶。

  1. 1 阶 + 1 阶 + 1 阶
  2. 1 阶 + 2 阶
  3. 2 阶 + 1 阶


递归公式:
f(n) = 1 n=1
f(n) = 2 n =2
f(n) = f(n-1) + f(n-2) n>=3
递归实现
``classSolution {
publicintclimbStairs(intn) {
if (n == 1){
return1;
}elseif (n == 2){
return2;
}else{
returnclimbStairs(n-1) + climbStairs(n-2);
}
}
}
优化方法使用hashmap
classSolution {
privateMap map = newHashMap<>();
publicintclimbStairs(intn) {
if (n == 1){return1;}
if (n == 2){return2;}
if (map.get(n) != null){
returnmap.get(n);
}
else{
intresult = climbStairs(n-1) + climbStairs(n-2);
map.put(n,result);
return result;
}
}
}

1. 两数之和

88. 合并两个有序数组

283. 移动零