#はじめに
以前からアルゴリズム系に苦手意識があり、ずっと勉強を後回しにしてきたのですが、このたび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);
}