生成所有可能的组合

生成所有可能的组合

给定2个阵列Array1 = {a,b,c...n}Array2 = {10,20,15....x}如何将所有可能的组合生成为StringA(I)b(J)c(K)n(P)哪里

1 <= i <= 10,  1 <= j <= 20 , 1 <= k <= 15,  .... 1 <= p <= x

例如:

a1 b1 c1 .... n1  
a1 b1 c1..... n2  
......  ......  a10 b20 c15 nx (last combination)

因此,在所有组合的总数中=元素的乘积array2 = (10 X 20 X 15 X ..X x)

类似于笛卡尔积,其中第二个数组定义了第一个数组中每个元素的上限。

有固定数字的例子,

    Array x =  [a,b,c]
    Array y =  [3,2,4]

所以我们会有3*2*4=24个组合。结果应是:

    a1 b1 c1  
    a1 b1 c2  
    a1 b1 c3  
    a1 b1 c4  

    a1 b2 c1  
    a1 b2 c2  
    a1 b2 c3  
    a1 b2 c4


    a2 b1 c1  
    a2 b1 c2  
    a2 b1 c3  
    a2 b1 c4  

    a2 b2 c1  
    a2 b2 c2  
    a2 b2 c3  
    a2 b2 c4


    a3 b1 c1  
    a3 b1 c2  
    a3 b1 c3  
    a3 b1 c4  

    a3 b2 c1  
    a3 b2 c2  
    a3 b2 c3  
    a3 b2 c4 (last)


青春有我
浏览 687回答 3
3回答

猛跑小猪

using&nbsp;System;using&nbsp;System.Text;public&nbsp;static&nbsp;string[]&nbsp;GenerateCombinations(string[]&nbsp;Array1,&nbsp;int[]&nbsp;Array2){ &nbsp;&nbsp;&nbsp;&nbsp;if(Array1&nbsp;==&nbsp;null)&nbsp;throw&nbsp;new&nbsp;ArgumentNullException("Array1"); &nbsp;&nbsp;&nbsp;&nbsp;if(Array2&nbsp;==&nbsp;null)&nbsp;throw&nbsp;new&nbsp;ArgumentNullException("Array2"); &nbsp;&nbsp;&nbsp;&nbsp;if(Array1.Length&nbsp;!=&nbsp;Array2.Length) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;ArgumentException("Must&nbsp;be&nbsp;the&nbsp;same&nbsp;size&nbsp;as&nbsp;Array1.",&nbsp;"Array2"); &nbsp;&nbsp;&nbsp;&nbsp;if(Array1.Length&nbsp;==&nbsp;0) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;string[0]; &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;outputSize&nbsp;=&nbsp;1; &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;current&nbsp;=&nbsp;new&nbsp;int[Array1.Length]; &nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;current.Length;&nbsp;++i) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Array2[i]&nbsp;<&nbsp;1) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;ArgumentException("Contains&nbsp;invalid&nbsp;values.",&nbsp;"Array2"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Array1[i]&nbsp;==&nbsp;null) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;ArgumentException("Contains&nbsp;null&nbsp;values.",&nbsp;"Array1"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outputSize&nbsp;*=&nbsp;Array2[i]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;current[i]&nbsp;=&nbsp;1; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;result&nbsp;=&nbsp;new&nbsp;string[outputSize]; &nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;outputSize;&nbsp;++i) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;sb&nbsp;=&nbsp;new&nbsp;StringBuilder(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;j&nbsp;=&nbsp;0;&nbsp;j&nbsp;<&nbsp;current.Length;&nbsp;++j) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(Array1[j]); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(current[j].ToString()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(j&nbsp;!=&nbsp;current.Length&nbsp;-&nbsp;1) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append('&nbsp;'); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result[i]&nbsp;=&nbsp;sb.ToString(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;incrementIndex&nbsp;=&nbsp;current.Length&nbsp;-&nbsp;1; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(incrementIndex&nbsp;>=&nbsp;0&nbsp;&&&nbsp;current[incrementIndex]&nbsp;==&nbsp;Array2[incrementIndex]) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;current[incrementIndex]&nbsp;=&nbsp;1; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--incrementIndex; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(incrementIndex&nbsp;>=&nbsp;0) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;++current[incrementIndex]; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;result;}
打开App,查看更多内容
随时随地看视频慕课网APP