力扣70.爬楼梯
class Solution {
public int climbStairs(int n) {
return dfs(n);
}
//递归
//注意每次你可以爬 1 或 2 个台阶
//如果最后一步是1 就先爬到n-1 把它缩小成0-n-1的范围
//如果最后一步是2 就先爬到n-2 把它缩小成0-n-2的范围
private int dfs(int i){
if(i <= 1){
return 1;
}
return dfs(i-1) +dfs(i - 2);
}
}
记忆搜索法+递归
class Solution {
public int climbStairs(int n) {
int[] memo = new int[n + 1];//定义memo数组记录返回值
return dfs(n,memo);
}
private int dfs(int i, int [] memo){
if(i<=1){
return 1;
}
//如果一个状态不是第一次遇到(memo中保存的结果不等于 memo 的初始值),
//那么可以直接返回 memo 中保存的结果。
if(memo[i] != 0){
return memo[i];
}
//如果一个状态(递归入参)是第一次遇到,
//那么可以在返回前,把状态及其结果记到一个 memo 数组中。
return memo[i] = dfs(i-1,memo) + dfs(i-2,memo);
}
}
力扣118. 杨辉三角
class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> aa = new ArrayList<List<Integer>>();//泛型
for(int i=0; i<numRows; i++){//行
List<Integer> row = new ArrayList<Integer>();//泛型
for(int j=0; j<=i; j++){//列
if(j == 0 || j == i){//最左边这列和最右边这列都是1
row.add(1);
}else{
row.add(aa.get(i-1).get(j-1) + aa.get(i-1).get(j));
}
}
aa.add(row);
}
return aa;
}
}
本文由mdnice多平台发布