PHP实现数字的排列组合

实现数字的排列组合

一、需求

例1 现有0,1,2,3四个数字要实现从000~333之间的组合

此组合共有4*4*4=64种

例2 现有1,2,3,4,5五个数字要实现11111~55555之间的组合


二、实现

下面的方法都可以实现上述类似的需求

    /**
     * Note:实现从$start到$end长度$len的不重复的数字
     * @param int $start 开始数字
     * @param int $end 结束数字
     * @param int $len 长度
     * @param int $num 当前数字初始值等于0
     * @param int $digit 当前数字位数初始值等于$len
     * @return array
     */
    function generateNumbers($start,$end,$len,$num,$digit) {
        if ($digit == 0) {
            return [str_pad($num, $len, '0', STR_PAD_LEFT)];
        }
        $result = [];
        for ($i = $start; $i <= $end; $i++) {
            $result = array_merge($result, $this->generateNumbers($start,$end,$len,$num * 10 + $i, $digit - 1));
        }
        return $result;
    }

三、结果

Array
(
    [0] => 000
    [1] => 001
    [2] => 002
    [3] => 003
    [4] => 010
    [5] => 011
    [6] => 012
    [7] => 013
    [8] => 020
    [9] => 021
    [10] => 022
    [11] => 023
    [12] => 030
    [13] => 031
    [14] => 032
    [15] => 033
    [16] => 100
    [17] => 101
    [18] => 102
    [19] => 103
    [20] => 110
    [21] => 111
    [22] => 112
    [23] => 113
    [24] => 120
    [25] => 121
    [26] => 122
    [27] => 123
    [28] => 130
    [29] => 131
    [30] => 132
    [31] => 133
    [32] => 200
    [33] => 201
    [34] => 202
    [35] => 203
    [36] => 210
    [37] => 211
    [38] => 212
    [39] => 213
    [40] => 220
    [41] => 221
    [42] => 222
    [43] => 223
    [44] => 230
    [45] => 231
    [46] => 232
    [47] => 233
    [48] => 300
    [49] => 301
    [50] => 302
    [51] => 303
    [52] => 310
    [53] => 311
    [54] => 312
    [55] => 313
    [56] => 320
    [57] => 321
    [58] => 322
    [59] => 323
    [60] => 330
    [61] => 331
    [62] => 332
    [63] => 333
)

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jiyutr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值