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
...{ sourceSet.remove(inex); findAllCombinations( sourceSet, soFar + singleBracket, ...
ArrayList
(probabilmente la maggior parte delle implementazioniList
) è una struttura dati mutabile: chiamandoremove
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.