проблема логики программирования - PullRequest
0 голосов
/ 28 декабря 2010

Мне нужна функция, которая может вернуть мне все возможные комбинации массива.

Пример:

$source = array('a', 'b', 'c');
$target = thisiswhatisearch($source);

Теперь $target должно выглядеть так:

array('a','b','c','ab','ac','cb','abc')

Мне не нужны aa, bb, cc.

Мне также не нужны ba, ca, acb .., потому что порядок не важен для меня.

Спасибо за любую помощь.

Ответы [ 3 ]

0 голосов
/ 28 декабря 2010

Пытался быть независимым от языка, но я думаю, что его 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;
}
0 голосов
/ 28 декабря 2010

Это решение вне ума. Вероятно, он не самый быстрый и чистый, но он работает. Это на 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;
}
}

Первая запись в результирующем списке является фальшивой и должна быть удалена в конце

0 голосов
/ 28 декабря 2010

Запись в Википедии для Комбинация имеет ссылку на код C , которая делает это.

...