При работе с лестницей Leetcode 70: Вы поднимаетесь по лестнице.Чтобы добраться до вершины, нужно сделать n шагов. Каждый раз вы можете подняться на 1 или 2 шага.Во сколько разных способов вы можете подняться на вершину?Вот мое первое решение:
class Solution {
public int fib (int n){
if (n <= 2) return n;
return fib(n-1) + fib(n-2);
}
public int climbStairs(int n) {
return fib (n+1);
}
}
, когда n <44, это работает, но n> = 44, это не работает. Из-за этого это приводит к ошибке при отправке в leetcode.но при использовании 2-го решения, показанного ниже
class Solution {
public int climbStairs(int n) {
if (n <= 2) return n;
int[] allWays = new int[n];
allWays[0] = 1;
allWays[1] = 2;
for (int i = 2; i < n; i++){
allWays[i] = allWays[i-1] + allWays[i-2];
}
return allWays[n-1];
}
}
, второе решение принимается с помощью leetcode.однако, когда n> = 46, это дает отрицательное число.
Может кто-нибудь дать мне какое-то объяснение, почему первое решение не удается?в чем разница между двумя решениями?Спасибо.