题目:牛客网
解题思路:
因为一次只能走1步或2步,所以n个阶梯的最后一步肯定是1步或2步,因此 f(n)=f(n-1)+f(n-2),一开始尝试用递归的方法,但是超时,之后采用一个数组来存储f(1),f(2)....f(n),是一个斐波那契数列,这样就避免了重复的计算。
递归法:(超时)
public static int climbStairs(int n) { if(n == 0){ return 0; } else if(n == 1){ return 1; } else if(n == 2){ return 2; } else{ return climbStairs(n-2)+climbStairs(n-1); } }
非递归:
public class Solution { public int climbStairs(int n) { if(n < 3){ return n; } int[] res = new int[n+1]; res[1]=1; res[2]=2; for(int i = 3; i <= n; i++){ res[i]=res[i-1]+res[i-2]; } return res[n]; } }