【问题标题】:Get all sub arrays of a particular length in an array获取数组中所有特定长度的子数组
【发布时间】:2013-04-16 17:45:14
【问题描述】:

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

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

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

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

【问题讨论】:

标签: c# arrays subset


【解决方案1】:

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

Algorithm to return all combinations of k elements from n

【讨论】:

    【解决方案2】:

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

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

        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 循环。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-19
      • 2018-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-12
      • 1970-01-01
      相关资源
      最近更新 更多