leetcode提出コードを見直す
WaffleCollege2期生のhatoです
7日目を担当します!
JavaScriptを始めてから1年半ぐらい経ちます
1年前からleetcodeをぼちぼち取り組んでおり、昔の超初心者の自分が書いたコードを今見るとどのような感じか気になり、提出コードを見直すことにしました
#70. Climbing Stairs
You are climbing a staircase. It takes n steps to reach the top.
あなたは階段を昇っています。階段の1番上までにn段かかります
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
毎回、あなたは階段を1段または2段で昇ることができます いくつの異なる方法で階段の1番上まで昇ることができますか?
条件:1 <= n <= 45
半年前に提出したコード
var climbStairs = function(n) {
if(n===0){
return 1;
}
if(n===1){
return 1;
}
let first = 1;
let second = 2;
let all_ways;
for(let i=3; i<=n; i++){
all_ways = first + second;
first = second;
second = all_ways;
}
return second;
};
今ならどう書き換えるか
1、変数名
2、条件を意識する
3、自分よりうまく書いている人のコードを真似する
1、変数名
first, secondよりもoneStep,twoStepのほうが他の人が見た際にわかりやすい
all_waysはalwaysに空目しそうなので、allPathなどに変更する
2、条件を意識する
条件に1 <= n <= 45とあるので、n === 0の場合分けがいらない。
3、自分よりうまく書いている人のコードを真似する
leetcodeは自分の解答がacceptされると、他の人の解答を見ることができます。
以下が、個人的に綺麗なコードだと思ったものを真似して書き換えたものです。
var climbStairs = function (n) {
let allPath = [0,1,2]
for (let i = 3; i < n; i++){
allPath[i] = allPath[i-1]+ allPath[i-2];
}
return allPath[n]:
};
このコードのすごい点
・シンプルでわかりやすい
・配列の特徴を活かしている
・1 <= n <= 45という条件を念頭にしっかり置いているのが感じられる
・高校生の頃に数学の綺麗な別解を見た気分になった
leetcodeの提出コードを見直してみて思うこと
1、一度解けていても、月日が経っているため忘れている
2、変数名の付け方などの視認性を上げたいと思った
3、もしコーディングテストなどで同様の問題が出てきた場合、解けるようにしたい
4、leetcodeたのしい🥳🥳