例如,字符串“AAABBB”将有排列:
"ABAABB",
"巴巴",
"ABABAB",
等等

什么是生成排列的好算法? (它的时间复杂度是多少?)

最佳答案

对于多重集,您可以按位置递归求解(JavaScript 代码):

function f(multiset,counters,result){
  if (counters.every(x => x === 0)){
    console.log(result);
    return;
  }

  for (var i=0; i<counters.length; i++){
    if (counters[i] > 0){
      _counters = counters.slice();
      _counters[i]--;
      f(multiset,_counters,result + multiset[i]);
    }
  }
}

f(['A','B'],[3,3],'');

关于列出具有重复字母的字符串的唯一排列的算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40752319/

10-09 23:01