はじめに
以前からアルゴリズム系に苦手意識があり、ずっと勉強を後回しにしてきたのですが、このたびQiitaで「競技プログラミング強化月間」が始まったので便乗して勉強してみることにしました。
試しに解いたLeetCodeが解説も意味不明なレベルだったので、もっと優しいレベルの問題を解いて記事にまとめていくことにしました。
JavaScriptでアルゴリズムの勉強をされている方の参考になれば幸いです。
記事を順次まとめていきますので、その他の記事ついてはマイページからご覧ください。
文字列反転
引数に文字列を与えたときに反転した文字列を返してください。
ex.) reverse('apple') === 'elppa', reverse('hello') === 'olleh', reverse('Greetings!') === '!sgniteerG'
解答
初期値が空の文字列reversedを用意し、引数の文字列strの文字characterをfor文で先頭から取り出します。
reversedを後ろからcharacterに連結していくことで、反転した文字列reversedが完成します。
function reverse(str) {
let reversed = '';
for (let character of str) {
reversed = character + reversed;
}
return reversed;
}
回文
引数に与えた文字列が回文だったときにtrue、回文ではなかったときにfalseを返してください。
ex.) palindrome("abba") === true, palindrome("abcdefg") === false
解答
文字列strをsplit('')で文字の配列にした後に、reverse()で配列の順番を反転させ、join('')で再び文字列reversedに戻します。
最後にstrとreversedを比較した結果を返します。
function palindrome(str) {
const reversed = str.split('').reverse().join('');
return str === reversed;
}
整数反転
引数に正負整数を与えたときに反転した正負整数を返してください。
ex.) reverseInt(15) === 51, reverseInt(981) === 189, reverseInt(-15) === -51
解答
String(n)で引数nを文字列に変換し、回文のときと同様に文字列reverseStrとして反転させます。
記号も含めて反転されてしまっているので、parseint(reverseInt)で正の整数に戻した後、Math.sign(n)でnの正負(+/-1)をかけてあげます。
function reverseInt(n) {
const reverseStr = String(n).split('').reverse('').join('');
return parseInt(reverseStr) * Math.sign(n);
}
参考資料