找到长度为n的第一个和最后一个数字,从数字d开始?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了找到长度为n的第一个和最后一个数字,从数字d开始?相关的知识,希望对你有一定的参考价值。

我需要找到长度为n的第一个和最后一个数字,并以数字d开头。

例如。我需要找到长度为6且从2开始的第一个和最后一个数字。结果应该是第一个数字= 200000,最后一个数字= 299999。

我有任何可用的功能,以帮助我得到一个逻辑来解决这个问题。

希望可以有人帮帮我..

答案

你可以尝试依赖这样一个事实:最小的数字将在所有0中结束并且在所有9中最大,然后使用str_repeat生成适当的拖尾数字:

echo $d . str_repeat('0', $n-1);
echo $d . str_repeat('9', $n-1);

对于$d = 2$n = 6,这将给你200000299999

如果你需要它们作为整数,那就行了

$start = (int)($d . str_repeat('0', $n-1));
$finish = (int)($d . str_repeat('9', $n-1));
var_dump($start);
var_dump($finish);

输出:

int(200000)
int(299999)
另一答案

这是一个使用代数来获取所需数字的选项。根据数字的宽度,我们可以计算出该宽度的最小数字。然后,起始编号只是该值乘以起始的第一个数字。结尾的数字也可以被取消。

$length = 6;
$first = 2;
$begin = pow(10, $length-1);
$start = $first * $begin;
$end = (($first + 1) * $begin) - 1;
echo $start . "\n";
echo $end;

200000
299999

Demo

这应该胜过接受的答案,因为生成数字只需要几个算术运算,而不是复杂的字符串操作操作。

以上是关于找到长度为n的第一个和最后一个数字,从数字d开始?的主要内容,如果未能解决你的问题,请参考以下文章

ATcoder D - Handstand 2

算法初步:二分查找

找到包含所有数字的最小长度子数组

求解圆圈中最后剩下的数字

剑指Offer对答如流系列 - 圆圈中最后剩下的数字

给你一个长度为 n 的数组,其中只有一个数字出现了大于等于 n/2 次,问如何使用优秀的 时空复杂度快速找到这个数字。