Javascript 组合算法的问题

组合长度: 4 (变量)
X 在 组合里的个数: 2 (变量)
数字在组合里的个数:4 - 2 (变量)

生成 X 和数字的所有组合, 例如如下

X0X0
X1X2

X2X1
1X2X
3X0X

阅读 2.2k
2 个回答

这个问题我们可以分成两部分来看:

  1. 我们把X看作是占位符,X的个数为xlen,在所有的位置中挑出xlen个位置占住,因为所有的X都是一样的,因此占住的位置选择是组合问题: a=len!/(xlen!*(len-xlen)!);
  2. 除X占住外的剩余的位置,就可以任意放置数字了,而这数字是自由排列问题:b=len^(len-xlen);

最后所有的组合个数为: sum = a*b;

看题目中的例子,len=4, xlen=2,数字的范围为0-3,个数为2(len-xlen)。
a = 4!/(2!*2!) = 6;
b = 4^2 = 16;
sum = a*b = 96;

var n = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];
for (i = 1; i < 16; i++) {
  var str = i.toString(2).length < 4 ? '0000'.substring(0, 4 - i.toString(2).length) + i.toString(2) : i.toString(2);
  if (str.match(/1/g).length === 2) {
    for (var j = 0; j < n.length; j++) {

      var t = str.replace(/1/g, 'X').replace(/0/g, 'x');

      t = t.replace(/x/, n[j]);

      for (var k = 0; k < n.length; k++) {

        t = t.replace(/x/, n[k]);
        console.log(t)

      }
    }
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题