https://leetcode-cn.com/problems/climbing-stairs/description/

我的第一个解决方案:(递归)超时

class Solution {
static int cnt=0;
public static void recursion(int step,int n) {
if(step==n) {cnt++;return;}
if(step>n) return;
recursion(1,n-step);
recursion(2,n-step);
}
public static int climbStairs(int n) {
recursion(1,n);
recursion(2,n);
return cnt;
}
public static void main(String[] args) {
System.out.println(climbStairs(5));
}
}

之后我冥思苦想了几个小时。。。。。得出了正确的代码

在演草纸上自己写几个样例就会发现规律

class Solution {
public static int recursion(int num1, int num2, int n, int steps) {
if(n==1) return 1;
// 统计num1的个数,每有一个num1就,num2就自增
// 统计num2的个数,每有一个num2就,num1自增1
// 然后步数增加,更新后的num1和num2作为参数递归传向下一层
if(n==steps) {
return num1+num2;
}
int temp1=num1+num2;
int temp2=num1;
return recursion(temp1, temp2, n, steps+1);
}
public static int climbStairs(int n) {
return recursion(1,0,n,1);
}
public static void main(String[] args) {
System.out.println(climbStairs(4));
}
}

LeetCode 爬楼梯_自增