输出m位n进制的数字集合
<?php/**
* 输出所有$m位的$n进制数值
* @param int $m 位数 最大的数有多少位 如100有3位
* @param int $n 进制 每一位上从0开始有几个数值可展示 如十进制表示每一位上从0开始有0到9一共10个数值可展示
* @return array 数组,一共有$m的$n次方个元素
*/
function getNumbersByBitsAndDigit(int $m, int $n) : array {
$result = [];
if ($m <= 0 || $n <= 0) {
return $result;
}
/**
* 核心思想:把结果集看做是一个n*(n^(m-1))的矩阵,每一行有n个,每一列有n^(m-1)个
* 例如3位十进制结果集,每一行有10个(0,1,2...9),每一列有10^2=100个(0,10,20..100..990),总计1000个元素
* 步骤:
* 1 第一步生成第一行
* 2 位数递进,依次生成两位数,三位数
* 2.1 在每轮位数的遍历中,利用原有数据,将最高位放到前面,产生新元素
* 2.1.1 如果最高位是0,则改变原数据,如0变成00,1变成01
* 2.1.2 如果最高位不是0,则将在原数据前面加上最高位,如0变成10,1变成11,然后作为新元素,放入结果集
* 2.1.3 最高位递进,产生20,21等
* 2.2 位数递进,更新成000,001,010..产生100,101..200..900..990..999
*/
//1位数生成
$result = range(0, $n-1, 1);
//2位及更多位数的生成
for ($b=1; $b<$m; $b++) {
$exist = count($result);
//对已生成数据进行遍历
for ($e=0; $e<$exist; $e++) {
$existValue = $result[$e];
//最高位数字遍历
for ($h = 0; $h < $n; $h++) {
if ($h == 0) { //为已有数据加上0最高位
$result[$e] = $h.$existValue;
} else { //在已生成数据前添加最高位,加入到结果集
$result[] = $h.$existValue;
}
}
}
}
return $result;
}
输入
$res = getNumbersByBitsAndDigit(2, 10);//获取所有2位数的10进制数字var_dump($res);
输出
array(100) { [0]=>
string(2) "00"
[1]=>
string(2) "01"
.
.
.
[98]=>
string(2) "89"
[99]=>
string(2) "99"
}
以上是 输出m位n进制的数字集合 的全部内容, 来源链接: utcz.com/z/516049.html