0
点赞
收藏
分享

微信扫一扫

Day63 单调栈part02

崭新的韭菜 2024-07-24 阅读 34

题目:

假设你正在爬楼梯。需要n阶你才能到达楼顶。

每次你可以爬1或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

思路:

我开始是写了一个函数计算爬一层和爬二层的个数,之后排列求和,但是超范围了,后来改了范围,但是结果不对,,,,

也不知道为啥,

后来看了结果越看越眼熟,这不是斐波那契数列吗?

之后就会嘞

结果代码:

int climbStairs(int n) {
    //int n,j;
    int sum=0;
    //scanf("%d",&n);
    int f_1=1;
    int f_2=2;
    int f_n=0;
    //int f_n_1=0;
    if(n==0||n==1||n==2)
    {
        return n;
    }
    for(int i=1;i<=n-2;i++)
    {
        f_n=f_1+f_2;
        //f_n_1=f_n+f_2;
        f_1=f_2;
        f_2=f_n;
    }
    return f_n;
   // return 0;
    
}

再接再励吧!!!!!!!

脑袋空空。

如果有更好的方案,请赐教,感谢!

补充一个递归法:

递归法思想:

同斐波那契数列一致,就是用递归写斐波那契,最后输出

见代码:

int *func(int n,int* f_n,int f_1,int f_2)
{    
    --n;
    if(n == -1)
        return n;  
    f_n[n] = f_1+f_2;
    f_1 = f_2;
    f_2 = f_n[n];
    func(n,f_n,f_1,f_2); 
    return f_n;
}
​
int climbStairs(int n) {
    
    int f_n[n];
    func(n,f_n,0,1);
    return f_n[0];
}

希望今天的自己比昨天更好!

加油啦!!

举报

相关推荐

0 条评论