Math 编程逻辑问题

Math 编程逻辑问题,math,combinations,Math,Combinations,我需要一个函数,可以给我一个数组的所有可能的组合回来 例如: $source = array('a', 'b', 'c'); $target = thisiswhatisearch($source); 现在,$target应该如下所示: array('a','b','c','ab','ac','cb','abc') 我不需要aa,bb,cc 我也不需要ba,ca,acb。。因为订单对我来说并不重要 感谢您的帮助。的Wikipedia条目中有一个可以做到这一点。试图对语言不可知,但我猜它类似于

我需要一个函数,可以给我一个数组的所有可能的组合回来

例如:

$source = array('a', 'b', 'c');
$target = thisiswhatisearch($source);
现在,
$target
应该如下所示:

array('a','b','c','ab','ac','cb','abc')
我不需要
aa
bb
cc

我也不需要
ba
ca
acb
。。因为订单对我来说并不重要


感谢您的帮助。

的Wikipedia条目中有一个可以做到这一点。

试图对语言不可知,但我猜它类似于C:

function combinations(array arr)
{
  combos = array();
  for (int i=1; i<2**arr.size(); i++)
  {
    int x = i;
    int c = 0;
    str = "";
    while(x>0)
      {
        int rem = x % 2;
        if(rem == 1)
          str += arr[c];
        x = x / 2;
        c++;
      }
    combos.add(str);

   }
return combos;
}
函数组合(数组arr)
{
组合=数组();
对于(int i=1;i0)
{
int rem=x%2;
如果(rem==1)
str+=arr[c];
x=x/2;
C++;
}
组合。添加(str);
}
返回组合;
}

这是一个头脑发热的解决方案。它可能不是最快、最干净的,但它有点有效。它是Java的,因为我打开了它:

public class Combination {

public static void main(String[] args) {
    String[] source = {"a","b","c"};
    List<String> result = combineMe(new ArrayList<String>(Arrays.asList(source)));
    for (String string : result) {
        System.out.println(string);
    }
}

public static List<String> combineMe(List<String> source) {
    List<String> result = new ArrayList<String>();
    if (source.size()==0) {
        result.add("");
        return result;
    }else{
        String tmp = source.remove(0);
        source = combineMe(source);
        for (String string : source) {
            result.add(("" + string).trim());
            result.add(tmp + string);
        }
    }
    return result;
}
}
公共类组合{
公共静态void main(字符串[]args){
字符串[]源={“a”、“b”、“c”};
列表结果=combineMe(新的ArrayList(Arrays.asList(source));
for(字符串:结果){
System.out.println(字符串);
}
}
公共静态列表组合元素(列表源){
列表结果=新建ArrayList();
if(source.size()==0){
结果:添加(“”);
返回结果;
}否则{
字符串tmp=source.remove(0);
源=组合元素(源);
for(字符串:源){
结果.add((“”+字符串).trim());
结果.添加(tmp+字符串);
}
}
返回结果;
}
}

结果列表中的第一个条目是假的,需要在最后删除

到目前为止您有什么?我发现这是解决方案的一部分:在该页面的底部是一个使用pear包的解决方案。我就选那个(--谢谢维基百科的链接-排列是一个很好的搜索词