PHP: 给出一个非重复字符串列表,如
$strings=array("asd","qwerty","123");// or more
我希望获得所有非重复组合(无论顺序),如
asd
asd qwerty
asd 123
asd qwerty 123
qwerty
qwerty 123
123
我正在寻找可能最有效的算法并且在单一功能中
答案 0 :(得分:0)
没有尝试最快,但只是从一个解决方案开始,尝试一下:
<%= form_tag '/questions/upload_questions', remote: true, multipart: true, class: "form-horizontal" do %>
答案 1 :(得分:0)
主要思想是组合的数量(如果所有字符串都不同)是n ^ 2 - 1,其中n =字符串的数量。因此,我们可以使用第i个组合的二进制表示来构建我们独特的组合。
在代码中它看起来像这样:
$someArray = ['abc', 'def', 'foo', 'bar'];
$combinations = pow(2, count($someArray)) - 1;
$result = [];
for ($i = 0; $i < $combinations; $i++) {
$result[$i] = [];
for ($j = 0; $j < count($someArray); $j++) {
// here we check if j-th bit of i is equal to 1
if (($i >> $j) & 1 == 1) {
$result[$i][] = $someArray[$j];
}
}
}