int数组:填充从1到给定数字的所有数字组合

时间:2015-03-30 18:29:03

标签: java arrays algorithm int combinations

这是我的第一篇文章,所以我会尝试尽可能清晰易懂。

我想帮助编写一个方法来填充int [](1D),其中包含从1到给定值的所有数字组合。每次都可以覆盖这些值。举个例子。如果数组长度为3,我希望数组的进展看起来像这样:

  

111,211,121,112,221,122,212,222,311,113,131,321,132,231,   ......

我认为分解它的最好方法可能是忘记顺序(所以如果数组已经是211,112就没必要了),然后有一个单独的方法来置换数组和每一步。 所以我想要创建的方法只需要使数组演变如下:

  

111 211 221 222 311 321 322 332 333

然后我可以在每个这些数组状态之间运行permute方法。

我设法制作了一个显示的方法:

  

111 211 112 121 221 122 212 222 322 223 232 332 233 323 333   433 ...

这具有所有排列(这对我现在要做的事情来说并不重要)但是当我编码它时,我没有让这些数字真正回归并覆盖每个组合(例如:311) )(我的数组中的数字之间的差异每次只有一个)

一些背景信息:我正在制定一个程序,通过在每个化合物前添加正确的化学计量系数来平衡化学反应。 例如:_H20 + _02 = _H2O2

和_表示系数的位置。 我有一个功能正常的方法,检查方程是否平衡,我需要设法尝试每个常量组合,直到方程是平衡(或直到达到限制)。所以我决定用int []来填充数组中的方程系数。

我愿意发布有关我的计划的更多信息或详细信息,如果它有兴趣回答我的问题。

谢谢,期待您的答案/意见。

有一个好的!

1 个答案:

答案 0 :(得分:1)

我不确定java是否有next_permutation方法,但在c ++中这个函数很容易做到,这是一个可以用c ++填充的指南,我希望这可以帮到你。这是链接:http://www.cplusplus.com/reference/algorithm/next_permutation/

但你也可以阅读这篇博客:http://codeforces.com/blog/entry/3980这非常清楚你要做什么。