2

我需要有关在 C# 中获取数组子集的帮助。所有其他例子对我没有多大帮助。

我想获取特定大小的数组的所有子集。

例如,如果输入数组是 {1,2,3,4} 并且我想要所有大小为 3 的子集,所有唯一子集 {1,2,3},{1,2,4},{2,3,4 },{1,3,4} 必须返回。

我是 C# 新手,非常感谢任何形式的帮助。

4

2 回答 2

0

检查这篇文章。这通过各种编程语言的示例进行了详细描述。我觉得不需要复制其他解决方案,所以我将把它作为一个链接供您从许多应该对您有所帮助的示例中进行选择

从 n 返回 k 个元素的所有组合的算法

于 2013-04-16T18:00:58.483 回答
0

听起来有点像家庭作业……

由于我认为大小是可变的,因此您需要使用递归。就像是:

    static void Main(string[] args)
    {
        int[] originalList = new int[] { 1, 2, 3, 4 };
        Stack<int> currentList = new Stack<int>();
        List<int[]> listOfSubsets = new List<int[]>();

        BuildListOfSubsets(originalList, listOfSubsets, 3, 0, currentList);
    }

    private static void BuildListOfSubsets(int[] originalList, List<int[]> listOfSubsets, int sizeOfSubsetList, int currentLevel, Stack<int> currentList)
    {
        if (currentList.Count == sizeOfSubsetList)
        {
            int[] copy = new int[sizeOfSubsetList];
            currentList.CopyTo(copy, 0);
            listOfSubsets.Add(copy);
        }
        else
            for (int ix = currentLevel; ix < originalList.Length; ix++)
            {
                currentList.Push(originalList[ix]);
                BuildListOfSubsets(originalList, listOfSubsets, sizeOfSubsetList, ix + 1, currentList);
                currentList.Pop();
            }
    }

结果将在 listOfSubsets 列表中。看看你是否能找到一个优化来尽早离开 for 循环。

于 2013-04-16T18:38:44.113 回答