数码资讯
PHP全排列递归算法代码
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
算法原理
如果p被用来表示n元素的完全排列,pi表示n元素不包含元素i的所有排列,(i)pi表示前缀i的排列之前排列皮,因此n元素的整个排列可以定义为:
(1)如果n=1,那么p的排列只有一个元素,i;
如果n>1,p的全部数组由置换(i)pi构成;
根据定义,我们可以看到,如果安排皮(k-1)元素已经产生,K元素的排列可以在每个PI与元我前面生成的
代码实现
复制代码代码如下所示:
函数秩($基础,$ NULL)
{
$ len = strlen($基地);
如果(1美元)
{
$;
}
其他的
{
($ i = 0;$ i;
{
等级(substr($ 0美元,,我)。Substr($基地,我+ 1美元美元美元,Len I-1),美元美元美元的温度基{我});
}
}
}
等级('123);
然而,在对结果进行多次测试之后,出现了一个问题:如果有相同的元素,则整个布局将重复。
例如,在'122的全排列的只有三例:'122 ','212 ',和'221';上述方法重复。
稍加修改,添加一个标志判断重复,并解决问题(代码如下):
复制代码代码如下所示:
功能fsrank(美元,美元临时= null)
{
静态数组();
$ len = strlen($基地);
如果(1美元)
{
$;
美元= $ $ $基础;
}
其他的
{
($ i = 0;$ i;
{
had_flag美元= false;
对于($ = 0;$ j I $;+ $ J)
{
如果($ $ i $ } = $基本{ $ })
{
had_flag美元=真;
打破;
}
}
如果($ had_flag)
{
继续;
}
FsRank(substr($ 0美元,,我)。Substr($基地,我+ 1美元美元美元,Len I-1),美元美元美元的温度基{我});
}
}
返回$;
}
打印';
print_r(fsrank('122 '));
打印';
如果p被用来表示n元素的完全排列,pi表示n元素不包含元素i的所有排列,(i)pi表示前缀i的排列之前排列皮,因此n元素的整个排列可以定义为:
(1)如果n=1,那么p的排列只有一个元素,i;
如果n>1,p的全部数组由置换(i)pi构成;
根据定义,我们可以看到,如果安排皮(k-1)元素已经产生,K元素的排列可以在每个PI与元我前面生成的
代码实现
复制代码代码如下所示:
函数秩($基础,$ NULL)
{
$ len = strlen($基地);
如果(1美元)
{
$;
}
其他的
{
($ i = 0;$ i;
{
等级(substr($ 0美元,,我)。Substr($基地,我+ 1美元美元美元,Len I-1),美元美元美元的温度基{我});
}
}
}
等级('123);
然而,在对结果进行多次测试之后,出现了一个问题:如果有相同的元素,则整个布局将重复。
例如,在'122的全排列的只有三例:'122 ','212 ',和'221';上述方法重复。
稍加修改,添加一个标志判断重复,并解决问题(代码如下):
复制代码代码如下所示:
功能fsrank(美元,美元临时= null)
{
静态数组();
$ len = strlen($基地);
如果(1美元)
{
$;
美元= $ $ $基础;
}
其他的
{
($ i = 0;$ i;
{
had_flag美元= false;
对于($ = 0;$ j I $;+ $ J)
{
如果($ $ i $ } = $基本{ $ })
{
had_flag美元=真;
打破;
}
}
如果($ had_flag)
{
继续;
}
FsRank(substr($ 0美元,,我)。Substr($基地,我+ 1美元美元美元,Len I-1),美元美元美元的温度基{我});
}
}
返回$;
}
打印';
print_r(fsrank('122 '));
打印';
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。