Sto provando a elaborare uno scenario che non ho mai visto prima e sto cercando di trovare un algoritmo per implementarlo correttamente. Parte del mio problema è un vago ricordo della terminologia corretta. Credo che quello di cui ho bisogno sia una variazione del problema della "combinazione" standard, ma potrei essere fuori.con sostituzione caratteri
Scenario Dato una stringa esempio "100"
(che chiameremo x
), producono tutte le combinazioni di x
che scambieranno una delle dette 0
caratteri (zero) per un o
(minuscola o). Così, per il semplice esempio di "100"
, mi sarei aspettato questa uscita:
"100"
"10o"
"1o0"
"1oo"
Ciò avrebbe bisogno di sostenere varia stringhe di lunghezza con diversi numeri di 0
caratteri, ma supponiamo che non ci saranno mai più di 5 istanze di 0
.
ho questo algoritmo molto semplice che funziona per il mio campione di "100"
ma cade a pezzi per qualcosa di più/più complicato:
public IEnumerable<string> Combinations(string input)
{
char[] buffer = new char[input.Length];
for(int i = 0; i != buffer.Length; ++i)
{
buffer[i] = input[i];
}
//return the original input
yield return new string(buffer);
//look for 0's and replace them
for(int i = 0; i != buffer.Length; ++i)
{
if (input[i] == '0')
{
buffer[i] = 'o';
yield return new string(buffer);
buffer[i] = '0';
}
}
//handle the replace-all scenario
yield return input.Replace("0", "o");
}
Ho una fastidiosa sensazione che la ricorsione potrebbe essere il mio amico qui, ma io sono lottando per capire come incorporare la logica condizionale di cui ho bisogno qui.
Non puoi semplicemente avere una matrice locale delle posizioni degli zeri e poi elencare le sostituzioni in un modello binario con zero e piccoli o come cifre binarie? –
@MOehm non sono sicuro di seguire ciò che intendi, potresti fornire un'implementazione e/o ulteriori dettagli? –