0

問題24は明確に尋ねます:

0、1、2、3、4、5、6、7、8、および9の数字の百万番目の辞書式順列は何ですか?

私の最初の文字列が次の場合:

$str = "0123456789";

私はリクエストを次のように解釈します:$stringに対して1,000,000の順列を実行します。

for( $i = 0; $i < 1000000; $i++ ) {

    $str = lexicographicPermute($str);

}

echo $str; // prints 2783915604, an incorrect answer.

ただし、代わりに999,999の順列のみを実行すると、正しい答えが返されます。

私はまだそれが正しい理由に頭を包み込もうとしています。

質問のどのような解釈により、1,000,000の順列を実行しないようになりますか?

4

1 に答える 1

3

元の文字列()も実際には順列であるという事実を見逃している$str = "0123456789"ので、同様にカウントする必要があります。)これを考慮してください:あなたがこのように書いたとしたらどうでしょうfor

for( $i = 0; $i < 1; $i++ ) {
    $str = lexicographicPermute($str);
}

...いくつの順列がありますか?もちろん、2つ:元の文字列とその文字列でlexicographicPermute()呼び出された結果。)。

補足として、直接的なアプローチ(文字通りそれらの(百万-1)の順列を構築する)がこの問題を解決する正しい方法ではないと思います。そうでなければ、それは人間にとってそれほど問題ではなかっただろうね?)。

于 2012-11-06T23:38:24.480 に答える