長さ 5 の指定された文字列を HH:MM 形式の時刻として表します。文字列には「?」が含まれている可能性があり、結果が有効な時間、おそらく可能な最大の時間になるように、それらを任意の数字に置き換える必要があります。さらに、指定された文字列番号は有効になり、文字列の正確な位置に「:」が表示されます。最初に強引な方法を使用し、次に効率的な方法を使用します。
例例
1を入力してください
リーリー
説明
の中国語訳は次のとおりです:
説明
埋めるスペースは 1 つだけで、最大時間は 12:59 です。
2を入力してください
リーリー
説明
の中国語訳は次のとおりです:
説明
ここには 2 つの空のスロットがあります。まず時間の部分に注目します。それを埋めるには 0、1、2 の 3 つの選択肢があります。分の部分には 0 から 5 までの選択肢があり、最大化するには 5 を入力できます。
###方法###
これまで例を見てきましたが、次に直面する可能性のあるさまざまな種類の状況を見てみましょう −
文字列には時間の部分と分の部分の 2 つの部分があります。
時間の部分の範囲は 0 ~ 23、分の部分の範囲は 0 ~ 59 です。
時間の部分にはさらに多くの状況があります--
‘x?’ ここで、x は 0、1、2 です。 0 の場合は最適な選択肢として 0 を選択でき、1 の場合は最適な選択肢として 9 を選択でき、2 の場合は最適な選択肢として 3 を選択できます。
'?x' (x の範囲は 0 ~ 9)。 x が 0 ~ 3 の範囲にある場合は 2 に置き換えることができ、それ以外の場合は 1 が最適です。
‘??’ 最大化する必要があるため、23 に置き換えます。 -
会議議事録、その他の事例 --
‘x?’ ここで、x の範囲は 0 ~ 5 です。 「?」を置き換えるには 9 が最良の選択です。
‘?x’ ここで、x の範囲は 0 ~ 9 です。 「?」を置き換えるには 5 が最良の選択です。
"??" 最大化する必要があるため、これを 59 に置き換えます。 -
上記の手順を実装するコードを見てみましょう -
Example
の中国語訳は次のとおりです:
Example
リーリー
###出力###
リーリー
時間と空間の複雑さ
ループや再帰呼び出しを使用しておらず、if-else 条件をチェックしているだけであるため、上記のコードの時間計算量は O(1) または定数です。
余分なスペースを使用していないため、上記のコードのスペース複雑さは O(1) です。また、この関数では、渡す文字列のサイズは常に固定の 5 です。
注: コードをより美しく、読みやすくするために、switch ステートメントを使用できます。これらのステートメントは、時間や空間の複雑さに影響を与えず、読み取りをより効率的にします。
また、バックトラックして再チェックすることも解決策ですが、これはすべてのケースをチェックすることになるため、ここで実装するのは効率的ではありません。
###結論は###
このチュートリアルでは、時間を 24 時間形式で表す文字列が与えられました。文字列には、最大有効時間を取得するために置換する必要がある「?」がいくつかあり、文字列内の文字は常に有効時間を指すことが保証されています。 if-else 条件と 2 つの関数を使用して、「?」を適切な大文字と小文字に置き換えました。ループや再帰関数を使用していないため、上記のコードの時間と空間の複雑さは一定です。
以上が指定された期間内の欠損値を HH:MM 形式で最大化します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。