70. Climbing Stairs

本文探讨了经典的爬楼梯问题,给出了一个通过排列组合求解的解决方案,并提及该问题也可以用斐波那契数列来解决。作者分享了自己的思考过程及实现代码。

前言:为了后续的实习面试,开始疯狂刷题,非常欢迎志同道合的朋友一起交流。因为时间比较紧张,目前的规划是先过一遍,写出能想到的最优算法,第二遍再考虑最优或者较优的方法。如有错误欢迎指正。博主首发优快云,mcf171专栏。

博客链接:mcf171的博客

——————————————————————————————

You are climbing a stair case. It takes n steps to reach to the top.

Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?

这个题目没多想,当成排列组合的问题来处理的。看了下讨论区,还可以当错斐波那数列解决。 Your runtime beats 14.69% of java submissions.

public class Solution {
    public int climbStairs(int n) {

        int num1 = n %2;
        int num2 = n /2;

        int results = 0;

        for(int i = 0 ; i <= num2; i ++){
            results += calCombination( num1 + num2 + i, num2 - i);
        }

        return results;
    }

    public int calCombination(int i, int j){

        long num = 1,deno = 1;
        int times = Math.min(j,i-j);
        j = times;
        int result = 1;
        for(int k = 0 ; k < times ; k ++){
            num *= (i - k);
            deno *= (j - k);
            if(num % deno == 0) {result *= num / deno; num = 1; deno = 1;}
        }
        return (int)(num * result/deno);
    }
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值