JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで数値を連続する奇数・偶数ごとに分割して配列として返す方法

問題

正の整数 n(n > 0)を引数として受け取り、その桁を「連続する奇数の並び」と「連続する偶数の並び」に分割した配列を返す JavaScript 関数を作成します。具体的には、数字を左から右へ読み進めながら、奇数から偶数へ(または偶数から奇数へ)切り替わる箇所で数値を区切ります。

たとえば入力が 124579 の場合、「1」は奇数、「24」は偶数、「579」は奇数であるため、出力は [1, 24, 579] となります。

解説

この問題は、次の手順で解くことができます。

  1. 数値を文字列化する: String(num) で数値を文字列に変換すれば、各桁にインデックスでアクセスできるようになります。
  2. 隣り合う桁の偶奇を比較する: 直前の桁と現在の桁をそれぞれ 2 で割った余り(% 2)が一致していれば、同じグループに属すると判断できます。
  3. グループを確定する: 偶奇が切り替わるタイミングで、それまで蓄積していた文字列を数値に変換して結果配列に追加し、新しいグループを開始します。
  4. 末尾の処理: ループ終了後も残っている文字列があれば、忘れずに結果配列へ追加します。

サンプルコード

const num = 124579;
const splitDifferent = (num = 1) => {
    const str = String(num);
    const res = [];
    let temp = '';
    for(let i = 0; i < str.length; i++){
        const el = str[i];
        if(!temp || +temp[temp.length - 1] % 2 === +el % 2){
            temp += el;
        }else{
            res.push(+temp);
            temp = el;
        };
    };
    if(temp){
        res.push(+temp);
        temp = '';
    };
    return res;
};
console.log(splitDifferent(num));

出力

[ 1, 24, 579 ]

コードのポイント

  • +temp[temp.length - 1] % 2 === +el % 2 の部分では、単項プラス(+)を使って文字を数値に変換し、偶奇を比較しています。
  • 条件式の !temp により、最初の桁は必ず一時バッファ(temp)に追加されるため、初期状態でも正しく動作します。
  • 計算量は、桁数を n とすると時間・空間ともに O(n) で済むため、大きな数値に対しても効率的に処理できます。
  1. 条件文を使わずに偶数・奇数を判定して表示するC言語プログラム

    この記事では、比較演算子(<、<=、!=、>、>=、==)などの条件文を一切使わずに、数値が偶数か奇数かを判定して表示する方法を解説します。 通常、偶数・奇数の判定は条件文を使えば簡単に行えます。数値を2で割り、余りが0であれば偶数、そうでなければ奇数と判定できます。また、数値と1のビットごとのAND演算を行い、結果が0なら偶数、1なら奇数と判定する方法も一般的です。 しかし今回は条件文が使えないため、少し工夫が必要です。ここでは、条件文なしで偶数・奇数を判定する2つの方法を紹介します。 方法1:配列のインデックスを利用する まず、文字列の配列を作成します。インデック

  2. Pythonで数値が奇数か偶数かを判定する方法を解説

    Pythonで数値が奇数か偶数かを判定する方法 Pythonでは、剰余演算子(%)を使うことで、数値が奇数か偶数かを簡単に判定できます。剰余演算子は「余り演算子」とも呼ばれ、ある数を別の数で割ったときの余りを求めるための演算子です。 判定の考え方はシンプルです。対象の数値を2で割り、その余りを確認します。余りが0であれば偶数、0以外(1)であれば奇数であると判断できます。 サンプルコード no = int(input(enter number)) if no % 2 == 0: print({} is even.format(no)) else: print({} is odd