我接受了采访,并被问到以下问题:
考虑到n楼梯,如果你一次使用1或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;
}
}