如何获得可以选择数组位置的所有可能方式?例如,对于大小为 2 的数组,有 3 种可能的第一个元素、第二个元素和这两个元素。对于大小为 3 的数组,可能是第一、第二、第三、第一和第二、第一和第三、第二和第三,最后是第一第二和第三。我想要一个简单的嵌套循环。
问问题
52 次
2 回答
1
嵌套循环在这里并不是真正的答案,因为嵌套的深度取决于数组的大小。
所以你认为二进制:大小N数组的子集对应于正确长度的非零二进制数,所以做类似的事情
for (int subset_c = 1; subset_c < (1<<N); subset_c++)
{
{ start thinking about a new subset }
for (int j=0; j<N; j++)
{
if ((subset_c>>j)&1) { the subset should contain array[j] }
}
}
于 2013-01-08T20:32:42.283 回答
0
您正在寻找能够生成 {0, 1 ..., n-1} 的所有可能子集的算法,并且有很多方法可以做到这一点。尝试快速搜索“生成所有子集”,您应该会找到大量解决此问题的好方法。两种主要方法涉及递归生成子集和使用二进制数。
希望这可以帮助!
于 2013-01-08T20:34:07.753 回答