ホームページ  >  記事  >  バックエンド開発  >  M の数を使用すると、最大数は N になります。2 と 5、および 6 と 9 は互いに同じであると見なされます。

M の数を使用すると、最大数は N になります。2 と 5、および 6 と 9 は互いに同じであると見なされます。

PHPz
PHPz転載
2023-09-05 16:09:031004ブラウズ

M の数を使用すると、最大数は N になります。2 と 5、および 6 と 9 は互いに同じであると見なされます。

最大数は、可能な最大数です。ここでは、整数 N と整数の文字列 M が与えられています。私たちのタスクは、整数 M の桁を使用して数値 N を形成し、最大カウントを返すことです。同時に、2 と 5 は同じ数字、6 と 9 は同じ数字と考えることができます。

サンプル例

1を入力してください

リーリー

説明 -5と2は同じであり、6と9も同じであるため、2つの「2」と2つの「9」があります。したがって、文字列 M (2596783) の数字を使用して数値 N (29) を形成する最大数は 2 です。

2を入力してください

リーリー ###方法###

次の方法について段階的に説明します -

    まず、「maxCountOfN」という関数を作成します。この関数は、指定された文字列「M」と数値「N」をパラメータとして受け取り、必要な整数「maxCount」を戻り値として返します。
  • この関数では、ハッシュ マップ 'mp' を作成し、文字列 'M' 内の各数値の頻度を保存します。
  • 文字列「M」のサイズを格納する変数「len」を定義します。
  • インデックス 'i = 0' から開始して文字列 'M' を 'len' 以下になるまで走査し、このループで次の操作を実行します。
  • 取得した数値が「2」の場合、それを「5」に変換します。
    • 数値が「6」として取得された場合、それを「9」に変換します。

    • 「mp」マップ内の各数値の頻度を文字と整数のペアとしてカウントします。

    • 数値の頻度を保存する別のハッシュ マップ 'mpN' を作成します N
  • while ループを使用して、N が 0 より大きくなるまで数値「N」をたどり、このループで次の操作を実行します。 -

  • 数値の最後の要素を格納する整数「rem」を作成します
    • 2であるかどうかを確認し、5に変換します

    • rem が 6 かどうかを確認し、9 に変換します

    • 「mpN」マップ内の各桁の頻度を文字と整数のペアとしてカウントします。つまり、整数は「mpN[rem '0']」などの文字としてマップに格納されます。

    • N を N に減算して、数値の最後の桁を削除します

    • 変数「maxCount」を作成し、「INT_MAX」を格納します。
  • 最後に、マップ 'mpN' をループして N の最大数を見つけ、このループで次の処理を実行します -

  • 変数「key」に桁数を格納する
    • 文字列のマップにキーが存在するかどうかを確認します。存在しない場合は、文字列「M」の数値を使用して数値「N」を作成できないことを意味し、「0」を返します。

    • 変数 'tempCount' に値 (文字列 M の数値の頻度を N の現在の数値の頻度で割った値) を格納する変数を作成します。

    • maxCount には、tempCount と maxCount の最小値を格納します。これは、数値「N」のすべての桁が文字列「M」に出現する場合にのみ数値「N」を生成できるためです

    • 最大数を返す
  • Example

    の中国語訳は次のとおりです:
  • Example
リーリー ###出力### リーリー ###結論は###

このチュートリアルでは、2 と 5、6 と 9 をそれぞれ同じものとして扱うことができるように、M の桁を使用して N の最大数を見つけるプログラムを実装しました。時間計算量 O(N M) と空間計算量 O(N M) で周波数を保存する必要があります。M は文字列のサイズ、N は数値のサイズです。

以上がM の数を使用すると、最大数は N になります。2 と 5、および 6 と 9 は互いに同じであると見なされます。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。