假设你现在正在爬楼梯,楼梯有n级。每次你只能爬1级或者2级,那么你有多少种方法爬到楼梯的顶部?
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
if(n==1)
System.out.println(1);
else if(n==2)
System.out.println(2);
else
System.out.println(fun(n));
}
public static int fun(int n) {
List<Integer> list = new LinkedList<Integer>();
list.add(1);
list.add(2);
for (int i = 3; i <= n; i++) {
list.add(list.get(0) + list.get(1));
list.remove(0);
}
return list.get(1);
}
}
此问题,我第一时间想到的是用迭代法,从后往前进行迭代,但是,运行代价太大。进而转用动态规划方法解决此问题,并采用一个list 来保存计算所需要的两个数据,通过对list执行list.add(list.get(0) + list.get(1))和list.remove(0)来进行对list中数据的更新。