java n进制_输出m位n进制的数字集合

代码

/**

* 输出所有$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

$exist = count($result);

//对已生成数据进行遍历

for ($e=0; $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"

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值