c – 从数字中获取所有组合而不重复


我使用c,我可以找到一个简单的方法从一组包含所有可能组合的数字中获取数组
例如:{1,2,3}

  { {3,1,2},
   {1,2,3},
   {3,2,1},
   {1,3,2},
   {2,1,3},
   {2,3,1}
  };

问题是如果我得到5个或更多数字如何使120组合

解决方法:

这些是排列,而不是组合.

您可以使用std::next_permutation来计算序列的所有排列.它看起来像这样:

std::array<int, 3> data = { 1, 2, 3 };
do {
    // use current permutation
} while (std::next_permutation(data.begin(), data.end()));

(我在本例中使用了C 0x中的std :: array;你也可以在C TR1和Boost中找到数组容器.这个算法也适用于任何可双向迭代的容器,比如std :: vector.)

上一篇:permutation 2(递推 + 思维)


下一篇:给定特定条件的排列的Python实现