输出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

回到顶部