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包的解决方案。我就选那个(--谢谢维基百科的链接-排列是一个很好的搜索词