为了账号安全,请及时绑定邮箱和手机立即绑定

请问排列-所有可能的数字集

请问排列-所有可能的数字集

PHP
aluckdog 2019-07-31 12:00:29
排列-所有可能的数字集我有数字,从0到8。结果,所有可能的集合,每组都应该使用所有的数字,每个数字只能在一组中出现一次。我希望看到用PHP编写的解决方案可以打印出结果。或者,至少,我希望在组合学理论上有所补充,因为我早已忘记了这一点。计算有多少排列的公式是什么?示例集:0-1-2-3-4-5-6-7-80-1-2-3-4-5-6-8-70-1-2-3-4-5-8-6-70-1-2-3-4-8-5-6-70-1-2-3-8-4-5-6-70-1-2-8-3-4-5-6-7以此类推.。
查看完整描述

3 回答

?
Helenr

TA贡献1780条经验 获得超3个赞

你在寻找排列公式:

nPk = n!/(n-k)!

在您的例子中,您有9个条目,并且要选择所有条目,即9P9=9!=362880

您可以在O‘Reilly的“PHPCookbook”的配方4.26中找到一个用于置换的PHP算法。

pc_permute(array(0, 1, 2, 3, 4, 5, 7, 8));

复制自O‘Reilly:

function pc_permute($items, $perms = array( )) {
    if (empty($items)) { 
        print join(' ', $perms) . "\n";
    }  else {
        for ($i = count($items) - 1; $i >= 0; --$i) {
             $newitems = $items;
             $newperms = $perms;
             list($foo) = array_splice($newitems, $i, 1);
             array_unshift($newperms, $foo);
             pc_permute($newitems, $newperms);
         }
    }}




查看完整回答
反对 回复 2019-08-02
?
红颜莎娜

TA贡献1842条经验 获得超12个赞


由于这个问题经常出现在Google搜索结果中,下面是接受的答案的修改版本,它返回数组中的所有组合,并将它们作为函数的返回值传递。

function pc_permute($items, $perms = array( )) {
    if (empty($items)) {
        $return = array($perms);
    }  else {
        $return = array();
        for ($i = count($items) - 1; $i >= 0; --$i) {
             $newitems = $items;
             $newperms = $perms;
         list($foo) = array_splice($newitems, $i, 1);
             array_unshift($newperms, $foo);
             $return = array_merge($return, pc_permute($newitems, $newperms));
         }
    }
    return $return;}

使用:

$value = array('1', '2', '3');print_r(pc_permute($value));



查看完整回答
反对 回复 2019-08-02
  • 3 回答
  • 0 关注
  • 353 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信