题目描述
题目 链接(P1255 数楼梯 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn))
解法一:递归
思路:
首先,确定递归终点和题目要求,递归终点是走到第n阶台阶,题目要求是走到第n阶台阶的走法
然后,确定每次递归完成的步骤,走一步或者两步
最后,确定方法需要携带的数据
1.当前在第几层:start 2.目标在第几层:end
代码实现
public class P1255 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
ladder(0,n);
}
//定义方法,走一步或者两步
public static void ladder(int start ,int end){
System.out.println(ladder1(start, end));
}
public static int ladder1(int start ,int end){
if(start == end){
return 1;
}
if(start == end - 1){
return ladder1(start + 1 , end);
}
//定义走一层
return ladder1(start + 1 , end) + ladder1(start + 2,end);
}
}
解法二:动态规划
思路:
定义一个dp数组用来记录走每一层的方法数
代码实现:
class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
if(n == 0){
System.out.println(0);
return;
}
BigInteger[] dp = new BigInteger[n + 5];
dp[1] = new BigInteger("1");
dp[2] = new BigInteger("2");
for (int i = 3; i <= n; i++) {
dp[i] = dp[i-1].add(dp[i-2]);
}
System.out.println(dp[n]);
}
}
总结
动态规划是一种空间换时间的算法