2017-07-18 62 views
-4

我已经突然停止开发我的应用程序。获取一组对象的所有可能的组合

我需要得到的参数的阵列的所有可能的组合,例如该阵列可以是这样的

[整数,布尔,字符串]

总可能的组合将被7(2^X - 1,其中X是参数的数量,这是我和朋友在尝试解决此问题时提出的公式)

下面是可能的组合的可视化。
[整数,布尔,字符串],
[整数,布尔值],
[整数,字符串],
[整数],
[布尔,字符串],
[布尔]和
[字符串]

正如您在可视化中看到的,唯一需要的是条目始终具有相同的相对顺序(整数必须始终在布尔和字符串之前,布尔必须始终在字符串之前)

我在问什么是:
如何找到字符串数组的每个可能的组合,其中组合不限于当前条目的任何特定长度,而仅限于具有与每个条目相同的顺序其他?

如果有人能给我一个正确的方向推动,将不胜感激。我一直在寻找几个关于寻找每个可能的价值的帖子,但是我找不到任何对我有帮助的帖子。

如果需要有关该问题的任何进一步的信息随时问

+0

对于大小为n的阵列,枚举所有整数0至2^N-1。对于此迭代中的第k个整数,当且仅当k的第i位为1时,输出数组[i]。在C中,通过以下方式检查此条件:if((k >> i)&1){printf (“%s”,数组[i]); }。现在你把它转换成Java。 – TheGreatContini

+2

Stack Overflow是一个问答网站,不是代码编写服务。请把你的问题缩小到具体的和关于编程的东西。 –

+0

我没有要求你写代码,我想推向正确的方向@JoeC – Jockie

回答

2

让我给你提示:十进制数的

检查二进制介绍:

0 000 
1 001 
2 010 
3 011 
4 100 
5 101 
6 110 
7 111 

现在,让我们以这种方式安排你的组合:

[_, _, _] 
[_, _, S] 
[_, B, _] 
[_, B, S] 
[I, _, _] 
[I, _, S] 
[I, B, _] 
[I, B, S] 

下一步是要执行的N位数

0

您正在查看组合问题。其中你有(1..N)个参数,你可能希望有一个使用输入(1..N)的组合序列。一旦检索到组合,您可以使用值(v1,v2,v3)作为索引到argumentList数组中以检索特定的对象组合。 使用geeksforgeeks中的以下代码作为参考,您可以在其上构建它。

// Java program to print all combination of size r in an array of size n 
import java.io.*; 

class Permutation { 

    /* arr[] ---> Input Array 
    data[] ---> Temporary array to store current combination 
    start & end ---> Staring and Ending indexes in arr[] 
    index ---> Current index in data[] 
    r ---> Size of a combination to be printed */ 
    static void combinationUtil(int arr[], int data[], int start, 
           int end, int index, int r) 
    { 
     // Current combination is ready to be printed, print it 
     if (index == r) 
     { 
      for (int j=0; j<r; j++) 
       System.out.print(data[j]+" "); 
      System.out.println(""); 
      return; 
     } 

     // replace index with all possible elements. The condition 
     // "end-i+1 >= r-index" makes sure that including one element 
     // at index will make a combination with remaining elements 
     // at remaining positions 
     for (int i=start; i<=end && end-i+1 >= r-index; i++) 
     { 
      data[index] = arr[i]; 
      combinationUtil(arr, data, i+1, end, index+1, r); 
     } 
    } 

    // The main function that prints all combinations of size r 
    // in arr[] of size n. This function mainly uses combinationUtil() 
    static void printCombination(int arr[], int n, int r) 
    { 
     // A temporary array to store all combination one by one 
     int data[]=new int[r]; 

     // Print all combination using temprary array 'data[]' 
     combinationUtil(arr, data, 0, n-1, 0, r); 
    } 

    /*Driver function to check for above function*/ 
    public static void main (String[] args) { 
     int arr[] = {1, 2, 3, 4, 5}; 
     int r = 3; 
     int n = arr.length; 
     printCombination(arr, n, r); 
    } 
} 

参考:http://www.geeksforgeeks.org/print-all-possible-combinations-of-r-elements-in-a-given-array-of-size-n/

1

试试这个。

String[] array = {"Integer","Boolean","String"}; 
for (int i = 1, max = 1 << array.length; i < max; ++i) { 
    for (int j = 0, k = 1; j < array.length; ++j, k <<= 1) 
     if ((k & i) != 0) 
      System.out.print(array[j] + " "); 
    System.out.println(); 
} 

结果

Integer 
Boolean 
Integer Boolean 
String 
Integer String 
Boolean String 
Integer Boolean String