Codewar を使い始めたので自分用アウトプット記録。3
5. Return Negative
パラメーターの数字をネガティブにして返す。
もともとネガティブの場合は、そのまま返す。
0 の場合は 0 を返す。
makeNegative(1); // return -1
makeNegative(-5); // return -5
makeNegative(0); // return 0
makeNegative(0.12); // return -0.12
1-1.単純に条件分岐でそれぞれ返す。
Time Complexity: O(1)
処理自体は一回
Space Complexity: O(1)
function makeNegative(num) {
if (num === 0) {
return 0;
} else if (num < 0) {
return num;
} else {
return num * -1;
}
}
ベストプラクティス参考
function makeNegative(num) {
//正の数と0には正の数、負の数には負で返すメソッド
return -Math.abs(num);
}
Math.abs()
returns the absolute value of the number.
returns x if x is positive or zero
returns -x if x is negative
Math.abs('-1'); // 1
Math.abs(-2); // 2
Math.abs(null); // 0
Math.abs(''); // 0
Math.abs([]); // 0
Math.abs([2]); // 2
Math.abs([1, 2]); // NaN
Math.abs({}); // NaN
Math.abs('string'); // NaN
Math.abs(); // NaN
function makeNegative(num) {
return num < 0 ? num : -num;
}
6. Reverse words
文字列をパラメータとして受け取り、それぞれの言葉を反転する。スペースはそのまま。
"This is an example!" ==> "sihT si na !elpmaxe"
"double spaces" ==> "elbuod secaps"
1-1.Brute Force
word ごとに配列に入れる。
一つ目のループで配列自体をループし、二つ目のループで文字列を後ろから見ていく。
Time Complexity: O(N^2)
ネストループ
Space Complexity: O(1)
function reverseWords(str) {
let reversed = '';
const words = str.split(' '); // ['double','spaces']
for (let i = 0; i < words.length; i++) {
const substr = words[i];
for (let j = substr.length - 1; j >= 0; j--) {
reversed = reversed + substr[j];
}
if (i !== words.length - 1) {
reversed = reversed + ' ';
}
}
return reversed;
}
ベストプラクティス参考
function reverseWords(str) {
// パラメータの文字列を配列に入れる
//さらにwordごとに配列に入れる、配列の順番を逆にするメソッドで順番を変え、配列から文字列に変換、すべて要素やってから全部文字列にする。
return str
.split(' ')
.map(function (word) {
return word.split('').reverse().join('');
})
.join(' ');
}
function reverseWords(str) {
return str.split(' ').map( str => str.split('').reverse().join('') ).join(' ');
}
メソッド
- Math.abs() -> 正数または0を受け取ったら、正数を返し、負の数には負の数を返す。
- split(' ') -> 文字列から配列に変換
- reverse() -> 配列の要素の順番をリバースする