2016-01-24 66 views
0

我正在寻找从长度为k的int数组中获取所有可能的长度为n的int数组的最佳方法,其中包含n-1个项目为null的选项。 例如我有5个单元(k = 5)的阵列和我想的3的所有组合(N = 3)的长度3的从长度为k的数组获得n上的所有组

int[] numbers = new int[5] {1, 2, 3, 4, 5}; 

和可能的子阵列:

{1, null,null},{1,null,2},{1,2,null} .....等等。

什么是最好的方法来做到这一点? Matan

+0

我目前对此毫无头绪,试图从互联网上获取有关处理该问题的最佳方法的信息。我发现了一些很好的算法,但它不包含无效的可能性。 –

+0

看看这个解决方案:http://stackoverflow.com/a/10630026。它会给你所有的排列,没有null值。在这个例子中,将'Enumerable.Range(1,3)'替换为你的'numbers'变量。 – Serge

+0

谢谢,这很好,但我的空选项需要在我的需要 –

回答

0

您可以在您的numbers数组中包含null。 该代码产生除{null,null,null}之外的所有可能的排列。

var numbers = new int?[]{null, 1, 2, 3, 4, 5}; 
var result = new List<int?[]>(); 

foreach (int? x in numbers) 
{ 
    foreach (int? y in numbers) 
    { 
     foreach (int? z in numbers) 
     { 
      if (x == null && y == null && z == null) 
       continue; 

      result.Add(new int?[] { x, y, z }); 
      Console.WriteLine("x: {0} - y: {1} - z: {2}", x, y, z); 
     } 
    } 
} 
+0

似乎不错,我会试试看 –

相关问题