2015-06-21 2 views
1

Я намерен найти все возможные подпоследовательности массиваВсе возможные подпоследовательности массива с помощью Java

Я пытался сделать это в 2-х различных способах

1) Метод 1

Я создаю строку со значениями в массиве

// all possible subsequences - all possible elements found by eleiminating zero or more characters 

Public class StrManipulation{ 

public static void combinations(String suffix,String prefix){ 
    if(prefix.length()<0)return; 
    System.out.println(suffix); 
    for(int i=0;i<prefix.length();i++) 
    combinations(suffix+prefix.charAt(i),prefix.substring(i+1,prefix.length())); 
} 

public static void main (String args[]){ 
    combinations("","12345"); 
    } 
} 

Проблемные --- работает только для отдельных цифровых символов

2) Способ 2

int a[] = new int[3]; 
    a[0]=2;a[1]=3;a[2]=8; 

    List<Integer> al= new ArrayList<Integer>(); 

    for(int i=0;i<3;i++) 
     al.add(a[i]); 

    int i, c; 

    for(c = 0 ; c < 3 ; c++) 
    { 

    for(i = c+1 ; i <= 3 ; i++) 
    { 

     List<Integer> X = al.subList(c,i); 

     for(int z=0;z<X.size();z++) 
      System.out.print(X.get(z)+" "); 

     System.out.println(); 
    } 
    } 

Проблема - Он генерирует подмассива только в качестве примера для массива 2 5 9 я получаю ---- [2] [2,5] [2,5,9] [5] [5,9] [9] Но это промахивается [2,9]

Так может ли кто-нибудь помочь мне с этим кодом?

+1

Вы должны добавить тег Java, так как это язык, который вы используете. –

ответ

5

Вот фрагмент кода, идея: добавить элемент в последовательность и ко всем предыдущим, это то, что вы хотите? Он не проверяется, существует ли последовательность.

public List<List<Integer>> combinations(int[] arr) { 
    List<List<Integer>> c = new ArrayList<List<Integer>>(); 
    List<Integer> l; 
    for (int i = 0; i < arr.length; i++) { 
     int k = c.size(); 
     for (int j = 0; j < k; j++) { 
     l = new ArrayList<Integer>(c.get(j)); 
     l.add(new Integer(arr[i])); 
     c.add(l); 
     } 
     l = new ArrayList<Integer>(); 
     l.add(new Integer(arr[i])); 
     c.add(l); 
    } 
    return c; 
} 
Смежные вопросы