LeetCode 爬楼梯

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 爬楼梯

上一篇:CF643C Levels and Regions


下一篇:18、递归