Problem 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次排列?
答案 0 :(得分:3)
您错过了原始字符串($str = "0123456789"
)实际上也是排列的事实,也应该计算它。考虑一下:如果你写了这样的for
怎么办:
for( $i = 0; $i < 1; $i++ ) {
$str = lexicographicPermute($str);
}
......你会得到多少排列?当然有两个:原始字符串和lexicographicPermute()
调用的结果。 )
作为旁注,我认为直接方法(从字面上构建那些(百万-1)排列)不是解决这个问题的正确方法。否则对人类来说不会有这么多问题,不是吗? )