【发布时间】:2015-08-31 00:14:08
【问题描述】:
我在关注编程测试,有这样的问题
从这个连续的数字:
123456789101112131415161718192021....
例如第 10 位是 1 第 11 位是 0 等等
第 1,000,000 位是什么?
第 1,000,000,000 个数字是多少?
第 1,000,000,000,000 位是什么?
您的解决方案的运行时间应低于 1 秒。
我已经得到了答案,但仍然超过 1 秒。我尝试使用多项式。
那么,我怎样才能减少从上面的数字中找到第 n 位的时间呢?
这是我的答案,(PHP):
function digit_pol ($n) {
$counter = 1;
$digit_arr = array();
for ($i = 1; $i <= $n; $i++) {
for ($j = 0; $j < strlen($i); $j++) {
// If array more than 100, always shift (limit array length to 11)
if($i > 10) {
array_shift($digit_arr);
}
// Fill array
$digit_arr[$counter] = substr($i, $j, 1);
// Found
if($counter == $n) {
return $digit_arr[$counter];
}
$counter++;
}
}
}
/**
* TESTING
*/
$find_place = 1000000;
$result = digit_pol($find_place);
echo "Digit of " . $find_place . "th is <b>" . $result . "</b>";
【问题讨论】:
-
0到9(含)之间会有多少位? 10到99(含)之间有多少位? 100 到 999 之间有多少?
-
顺便说一句,我的英语不好。但我希望我能清楚地解释目标。 @aioobe,您的意思是“如何使用我的代码?”这完全是我测试过的代码。您可以对其进行测试,只需复制并保存即可。第 1,000,000 个数字仍然超过 1 秒。
-
你的问题是什么?
-
我会尝试消除使用字符串并根据数学计算它。我会尝试计算在搜索到的地方或周围打印的数字 x。在第一个循环中,我将增加 n 并计算 10^n 和 10^(n+1) 之间有多少个数字,以及所有这些数字的字符串有多长。这样我就会很快接近。在第二个循环中,有必要找到其余的数字。最后你知道搜索到的数字在数字y中的位置x,这很容易计算。
-
@ajiyakin,你误解了我的意思。我对 PHP 不是很熟悉,但是如果我用伪代码或 Java 生成答案,这对你还有帮助吗?