package dp.climbStairs; /** * 70. 爬楼梯 * 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 * * 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? * * 注意:给定 n 是一个正整数。 * * 示例 1: * * 输入: 2 * 输出: 2 * 解释: 有两种方法可以爬到楼顶。 * 1. 1 阶 + 1 阶 * 2. 2 阶 * 示例 2: * * 输入: 3 * 输出: 3 * 解释: 有三种方法可以爬到楼顶。 * 1. 1 阶 + 1 阶 + 1 阶 * 2. 1 阶 + 2 阶 * 3. 2 阶 + 1 阶 */ public class climbStairs { /** * 如果用递归,因为int只能递归45次,所以不会栈溢出,但是会超时 * * 所以使用dp. * @param n * @return */ public static int climbStairs(int n) { if(n==1){ return 1; } if(n==2){ return 2; } int dp[] = new int[n]; dp[0]= 1; dp[1]=2; for (int i = 2; i < n; i++) { dp[i]=dp[i-1]+dp[i-2]; } return dp[n-1]; } public static void main(String[] args) { System.out.println(climbStairs(45)); } }
不会,我可以学;落后,我可以追赶;跌倒,我可以站起来!