ritorna l'ArrayList aggiornato <characters>dopo aver rimosso l'elemento specificato all'indice</characters>

sto cercando di scoprire se c'è la possibilità di restituire l'ArrayList aggiornato dopo aver rimosso l'elemento specificato all'indice in una singola riga in modo da poter passare alla funzione ricorsiva. di seguito è riportato un frammento del mio codice che cerca di generare tutte le combinazioni parentesi valide date n coppie di parentesi "()".

la mia preoccupazione è nella funzione ricorsiva chiamata "findAllCombinations" dove dopo alcune validazioni voglio rimuovere un carattere ad ogni chiamata ricorsiva dal courceSet arrayList. tuttavia sourceSet.remove(index) restituisce un carattere. invece voglio passare l'elenco aggiornato dopo aver rimosso il carattere in una riga. è possibile?

nota: la linea qui sotto è sintatticamente sbagliata e usata solo per una migliore illustrazione.

 findAllCombinations(sourceSet.remove(index), soFar + singleBracket, singleBracket); .

ho passato attraverso la documentazione ufficiale ma non ho trovato alcun aiuto.

qualsiasi aiuto è apprezzato, e grazie per il vostro tempo.

public class GenerateParenthesis {

    char singleBracket;

    List<String> answerSet = new ArrayList<String>();

    char[] repoSet = {'(',')'};

    public List<String> generateParenthesis(int n) {

        String soFar = "(";

        List<Character> sourceSet = new ArrayList<Character>();

        for(int i = 0;i<n;i++){
            sourceSet.add('(');
            sourceSet.add(')');
        }

        findAllCombinations(sourceSet,soFar,'(');

        return answerSet;

    }


    public void findAllCombinations(List<Character> sourceSet,String soFar,Character toRemove){

        if(sourceSet.isEmpty()){
            answerSet.add(soFar);           // append to a answer set list containing all combinations
            return;
        }

        for(int i = 0;i<2;i++){

           singleBracket = repoSet[i];
           int index = sourceSet.indexOf(singleBracket);
           if(index!=-1) {
               findAllCombinations(sourceSet.remove(index), soFar + singleBracket, singleBracket);
           }
        }
    }


    public static void main(String args[]){

        GenerateParenthesis gp = new GenerateParenthesis();

        List<String> ans = new ArrayList<String>();

        ans = gp.generateParenthesis(3);

    }
}

En title : Return the updated ArrayList after removing the specified element at the index

4 Comments:

  1. sarebbe un'opzione per farlo in 2 linee? come ...{ sourceSet.remove(inex); findAllCombinations( sourceSet, soFar + singleBracket, ...
  2. ArrayList (probabilmente la maggior parte delle implementazioni List) è una struttura dati mutabile: chiamando remove si modifica la lista piuttosto che restituire una nuova lista senza l'elemento rimosso.

    se si desidera che quest'ultimo comportamento, il modo semplice e veloce è quello di fare una copia della lista.

    // (inside the if...)
    // pass the original list to the constructor to make a copy
    List<Character> sourceSetCopy = new ArrayList<>(sourceSet);
    // modify the copy
    sourceSetCopy.remove(index);
    // use the modified copy
    findAllCombinations(sourceSetCopy, soFar + singleBracket, singleBracket);
    
  3. ringraziamenti @Fildor per l'insight, tuttavia quando il codice esce da ogni chiamata ricorsiva desidero che il sourceSet mantenga il valore originale del sourceSet (che ha avuto mentre sta andando nella chiamata ricorsiva) che non accadrebbe in questo case.Correct me se sbaglio, tutti i suggerimenti apprezzati.
  4. in questo caso, è necessario farlo in modo diverso, comunque. sourceSet.remove (index) modificherà sempre l'elenco. si dovrebbe passare una copia che manca l'elemento all'indice.

More similar articles:

  • perché è necessario spostare gli elementi di ArrayList a sinistra dopo aver rimosso un elemento?
  • qual è il risultato dopo aver rimosso un elemento nel mezzo di un ArrayList?
  • decrementa il contatore in un ciclo for dopo aver rimosso l'elemento ArrayList?
  • ArrayList IndexOutOboundscuception dopo aver rimosso un oggetto da ArrayList
  • elemento ArrayList non aggiornato dopo l'operazione
  • non vedo i dati inviati dopo aver aggiornato la pagina una o due volte: come si svuota l'ArrayList da solo?
  • ArrayList sostituisce l'elemento se esiste in un dato indice?
  • ArrayList aggiornato in modo errato, sovrascritto tutto con l'ultimo elemento
  • il file non viene aggiornato dopo aver rimosso System.out.println ("response::" + conn.getResponseMessage ());
  • stampare un elemento rimosso casualmente da una lista di array, quindi stampare l'elenco aggiornato
  • elemento rimosso da ArrayList, ma notifyDataSetChanged () cancella solo l'elemento inferiore
  • può ancora esistere un oggetto dopo essere stato rimosso da un ArrayList?
  • adattatore ListView non aggiornato dopo aver rimosso un elemento
  • passato ArrayList viene aggiornato + Java
  • ArrayList of Strings contiene caratteri specifici Java
  • ArrayList non è riuscito a rimuovere il carattere
  • Java - Leggere caratteri da file a ArrayList
  • Git "Già aggiornato" anche dopo aver rimosso la directory locale
  • trova quante volte ogni lettera è contenuta in un ArrayList di Personaggi
  • <string>controllare se ogni lettera in ArrayList è un certo carattere? </string>
  • le linee sono scomparse dopo aver rimosso l'ultimo carattere di una stringa usando Python
  • come utilizzare ArrayList.addAll ()?
  • ModelState Error non viene rimosso dopo aver aggiornato la pagina
  • ArrayList all'esterno mentre loop non viene aggiornato
  • come restituire un oggetto dopo averlo rimosso da un ArrayList?
  • il dizionario di Apache Solr suggester non viene aggiornato dopo aver rimosso alcuni record dalla raccolta
  • come ottenere la stessa posizione su due ArrayMistif Ho rimosso un valore dal primo ArrayList
  • perché l'intero elenco ArrayList viene rimosso quando si chiama il metodo di rimozione?
  • ArrayList aggiornato inserendo una riga ma Jtable ancora non aggiorna
  • perché non posso dichiarare un ArrayList di caratteri