php 字符串所有组合,php – 使用一组字符串生成所有可能的组合

在数学术语中,您要求输入集的所有可能的非空有序子集.在在线整数序列百科全书中,此类序列的数量显示为

sequence A007526 – 请注意,此序列以4,15,64,325开头,与您发现的完全一致.

这个问题在Python中承认了一个非常简短,有效的解决方案,因此我将首先发布该解决方案:

def gen_nos(s):

for i in sorted(s):

yield i

s.remove(i)

for j in gen_nos(s):

yield i+j

s.add(i)

例:

>>> list(gen_nos(set(['a', 'b', 'c'])))

['a', 'ab', 'abc', 'ac', 'acb', 'b', 'ba', 'bac', 'bc', 'bca', 'c', 'ca', 'cab', 'cb', 'cba']

请注意,排序并非严格必要;它只是确保输出按字典顺序排序(否则,元素按设定顺序迭代,这基本上是任意的).

要将其转换为PHP,我们必须使用带有额外数组参数的递归函数来保存结果:

function gen_nos(&$set, &$results) {

for($i=0; $i

$results[] = $set[$i];

$tempset = $set;

array_splice($tempset, $i, 1);

$tempresults = array();

gen_nos($tempset, $tempresults);

foreach($tempresults as $res) {

$results[] = $set[$i] . $res;

}

}

}

例:

$results = array();

$set = array("a", "b", "c");

gen_nos($set, $results);

var_dump($results);

产生

array(15) {

[0]=>

string(1) "a"

[1]=>

string(2) "ab"

[2]=>

string(3) "abc"

[3]=>

string(2) "ac"

[4]=>

string(3) "acb"

[5]=>

string(1) "b"

[6]=>

string(2) "ba"

[7]=>

string(3) "bac"

[8]=>

string(2) "bc"

[9]=>

string(3) "bca"

[10]=>

string(1) "c"

[11]=>

string(2) "ca"

[12]=>

string(3) "cab"

[13]=>

string(2) "cb"

[14]=>

string(3) "cba"

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值