php - 获取所有非重复的字符串组合(无论顺序如何)

时间:2016-10-27 21:19:08

标签: php string algorithm combinations

PHP: 给出一个非重复字符串列表,如

  $strings=array("asd","qwerty","123");// or more 

我希望获得所有非重复组合(无论顺序),如

  asd       
  asd   qwerty  
  asd   123 
  asd   qwerty  123
  qwerty        
  qwerty    123 
  123       

我正在寻找可能最有效的算法并且在单一功能中

2 个答案:

答案 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];
       }
    }
}