LeetCode) 70. Climbing Stairs
階段を上る時の数の問題を求めます.
Language: java
class Solution {
public int climbStairs(int n) {
int sum = 0;
if(n == 1) return 1;
if(n == 2) return 2;
sum = climbStairs(n-2) + climbStairs(n-1);
return sum;
}
}
書き終わったら分かりますが、結果はフィボナッチの問題です.アルゴリズムの問題を解く理由を知っています...
しかし問題が発生しました
最後に45個の透かしを入れると、TimeLimit Exceededエラーが発生します.
理由はなんだろう…?
しかし、グーグルを遊んでいたとき、私のような問題が発生した人は1人や2人ではないことに気づいた.
だから見つけた解決策は配列を指定することです.
class Solution {
int[] stairs = new int[46];
public int climbStairs(int n) {
stairs[1] = 1;
stairs[2] = 2;
for(int i = 3; i < stairs.length; i++) {
stairs[i] = stairs[i-1] + stairs[i-2];
}
return stairs[n];
}
}
上記の疑問を解消することができます.無計画にsumで回ると、また回るたびにもう一度作って探しに行くので時間がかかります.
nの値も
45まで指定するので、45の大きさの配列を作っておき、nに対応する値を入れておき、戻るときにその値を外せばいいのです!
時間もずいぶん短くなり、いい方法のようです.
はあ、まったく関係ないように見える問題で、フィボナッチだったのか!知りたければ、いったいどのくらいかかるのか、いろいろな問題を解決してみようか・・・反省+感嘆中
Reference
この問題について(LeetCode) 70. Climbing Stairs), 我々は、より多くの情報をここで見つけました https://velog.io/@stringstrjava/LeetCode-70.-Climbing-Stairsテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol