如果你一次使用1或2,你可以爬多少种方法

时间:2013-06-09 17:54:10

标签: algorithm

我接受了采访,并被问到以下问题:

考虑到n楼梯,如果你一次使用1或2,你可以攀爬多少种方式?

我认为递归可能有用吗?..还有其他方法吗?

2 个答案:

答案 0 :(得分:8)

考虑L(N)作为到达第N步的方法的数量。

因为只有两个步骤,你可以从那里得到:N-1和N-2

您可以进入步骤(N-1)的所有方式+到达步骤(N-2)的方式数量将为您提供总路数:

L(n)= L(n-1)+ L(n-2)

这看起来像 Fibonacci序列!

答案 1 :(得分:0)

您可以使用动态编程 代码:

int ways(int n) {
int[] dp = new int[n+1];
Arrays.fill(dp, -1);
return go(0, dp, n); 
}

int go(int step, int[] dp, n) {
if(step == n) {
    return 1;
} else if(step>n) {
    return 0;
} else if(dp[step] != -1) {
    return dp[step];
} else {`enter code here`
    int ways = go(step+1, dp, n) + go(step+2, dp, n);
    dp[step] = ways;
    return ways; 
}
}