@MaximIs

Где ошибка в переборе?

задача состоит в том, чтобы с помощью рекурсии перебрать всевозможные комбинации для массива символов в верхнем и нижнем регистрах. На вход подается массив с символами в нижем регистре. В пример привел массив символов char[] ch = new char[3] { 'c', 'a', 't' };
При прогоне через тесты на сайте курса, не найдена комбинация ('C','a','T').
public static List<string> AlternateCharCases(string lowercaseWord)
        {
            var result = new List<string>();
            AlternateCharCases(lowercaseWord.ToCharArray(), 0, result);
            var distinctRes = result.Distinct().ToList();
            return distinctRes;
        }
 static void AlternateCharCases(char[] word, int startIndex, List<string> result)
        {
            var tmpVarriable = word.ToArray();
            if (word.Length == startIndex)
            {
                result.Sort();
                return;
            }
            for (int i = startIndex; i < word.Length; i++)
            {
                result.Add(new string(word));
                word[i] = char.ToUpper(word[i]);
                result.Add(new string(word));
            }
            AlternateCharCases(tmpVarriable, startIndex + 1, result);
        }
  • Вопрос задан
  • 300 просмотров
Решения вопроса 1
Не понимаю зачем внутри метода этот цикл. Можно сделать несколько проще. Смысл в том, чтобы на каждом вызове метода AlternateCharCases менять регистр буквы word[startIndex] на нижний и вызывать этот же метод со смещением startIndex, затем менять регистр на верхний и снова вызывать этот же метод . Наверно не очень ясно выразился, вот работающий код:
static void AlternateCharCases(char[] word, int startIndex, List<string> result)
{
     if (word.Length == startIndex)
     {
          result.Add(new string(word));
          return;
     }
     word[startIndex] = char.ToLower(word[startIndex]);
     AlternateCharCases(word, startIndex + 1, result);
     word[startIndex] = char.ToUpper(word[startIndex]);
     AlternateCharCases(word, startIndex + 1, result);
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы