【发布时间】:2016-10-04 04:31:14
【问题描述】:
假设我有一个整数向量v = {0, 1,..., N-1},大小为N。
给定k 的大小,我想生成v 的所有k 大小的组合。
for example: k = 2, N = 10
{0,1}, {0,2}, ..., {0,9}, {1,2}, ..., {8,9}
但我想一个一个地做,使用一个叫NextCombination的方法:
bool NextCombination(vector<int>& v, int k, int N){
if( is not the last combination){
turn v into it's next combination
return true;
}
return false;
}
这意味着,鉴于v 的当前状态、组合的大小k 和元素总数,我想更改v(如果可能)并返回一个bool 指示从v 中得到一些下一个组合是可能的。
如果没有一些无聊的递归,我无法弄清楚如何做到这一点,而且由于这只是我正在做的事情的一个小问题,我想找出一些聪明/小的解决方案。
【问题讨论】:
-
从 v 中获得下一个组合是什么意思?
-
我的意思是如果 k = 2 和 N = 4,我从向量 {0,1} 开始,nextCombination 会将它变成 {0,2},然后变成 {0,3},然后 { 1,2},然后是 {1,3},然后是 {2,3},最后返回 false
标签: c++ algorithm math combinations combinatorics