题目:牛客网
解题思路:
因为一次只能走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]; } }
本文探讨了牛客网上的经典算法题目“爬楼梯”,通过分析得出最优解法。介绍了递归法及其存在的问题,最终采用非递归方法,利用数组存储斐波那契数列,有效避免了重复计算,提高了算法效率。
241

被折叠的 条评论
为什么被折叠?



