使用Javascript基于总和对一组数字进行排序

时间:2018-07-17 11:54:39

标签: javascript sorting permutation

我遇到了以下问题,由于网格布局不足以及数学函数的经验不足,我不确定该如何解决。

编写一个函数,以从以下一组数字创建置换,以使三个或更少的整数之和等于1或2或3或4或5。然后根据置换之和对置换进行分组。 例如:

[z,b]; [y,a]; [x,a]; ...属于置换集1

[z,b] [y,a]; [z,e]; [y,a] [x,a] ....属于置换集2

   a, b, c, d, e
 z 3, 1, 5, 4, 2
 y 1, 3, 2, 5, 4
 x 1, 4, 3, 5, 2
 w 3, 2, 5, 1, 4
 v 4, 1, 5, 2, 3
 u 3, 2, 4, 5, 1
 t 1, 5, 4, 2, 3
 s 5, 2, 1, 4, 3
 r 5, 3, 2, 4, 1
 q 5, 3, 4, 1, 2
  1. 3个或更少的数字之和为1,2,3,4或5

例如:      [z,a] => 3      [z,b] => 1 + [z,e] => 2 = 3

因此,[[[[z,a]],[[z,b],[z,e]]]是元素总和为3的排列的样本解集。解决方案集包含3个或更少的元素。

  1. 根据排列总和对排列进行分组  从以上示例中,  [[[[z,a]],[[z,b],[z,e]]]是元素的总和为3的排列集。

类似地,在元素的置换集合中总和为3的元素也将更多。此外,在元素的置换集合中总和为1,2,4或5的子集。

1 个答案:

答案 0 :(得分:1)

与其说数学是问题,不如说是编码问题。

下面我首先介绍了您的数组,这使循环变得更容易。然后,当我需要标签时,只需按索引进行计算即可。

完成此操作后,我刚刚创建了一个多级循环,该循环将迭代每个组合50 * 50 * 50、125000个组合,在每个级别上都会进行检查,组合1,组合2,等等。还有一个检查,以确保它不重复索引,例如。 1 1 1,无效。

forEach部分只是首先循环输入,然后将值传递,并将组成该值的索引传递到check函数中。在此forEach中,它为第二个编号执行另一个forEach,依此类推。因此,您在前3个样本(不包括重复项)中得到的结果是-> 3 [0]3 + 1 [0, 1]3 + 1 + 5 [0,1,2],因此得到3:za {{1} },最后一个将被跳过,等于9。

4:[za,zb]只是为了确保我们不会重复,例如。 if (l1ix <= l0ix) return;[za,zb]的分类相同,这是因为我确保下一级索引始终大于上一级索引。

下面是一个示例片段。

[zb,za]