• Как реализовать алгоритм рекурсией?

    @EternaLGreeD
    Wataru, Спасибо еще раз за совет! Посидев 2 часа, что-то не вышло переделать, так чтобы возвращалось только int-овое значение позиции, а ответ собирать в 3 параметре метода. Но зато как-то быстро заработало с использованием дополнительного класса для возврата, где есть 2 поля (номер и текущая строка). Если вас не затруднит, не могли бы вы помочь со способом , где передается дополнительный reference параметр? Хоть и сделал одним способом, но перфекционизм не дает покоя :)

    Вот что получилось с использованием доп. класса. Тут совсем было просто.
    spoiler

    public class UnpackStringNew {
    
    
        public static CurrentStringNew unpackString(String s, int begin){
            int i = begin;
            StringBuilder ans = new StringBuilder();
            while (i < s.length()){
                if (s.charAt(i) == ']') break;
                if( (s.charAt(i) >= '0') && (s.charAt(i)<='9')){
                    int k =0;
                    while ((i < s.length()) && (s.charAt(i) >= '0') && (s.charAt(i)<='9')){
                       k= 10*k + ((int) s.charAt(i) - (int) '0');
                       i++;
                    }
                    if ((s.charAt(i) >= 'a' && s.charAt(i) <= 'z') || (s.charAt(i) >= 'A' && s.charAt(i) <= 'Z')){
                        char [] repeatedChar = new char[k];
                        Arrays.fill(repeatedChar,s.charAt(i));
                        ans.append(repeatedChar);
                        i++;
                    } else if (s.charAt(i) == '['){
                        CurrentStringNew currentStringNew = unpackString(s, i + 1);
                        i = currentStringNew.Pos;
                        for (int j = 0; j < k; j++) {
                            ans.append(currentStringNew.currentStr);
                        }
    
                    }
    
                } else {
                    ans.append(s.charAt(i));
                    i++;
                }
            }
            if (i < s.length()) i++;
            CurrentStringNew currentStringNew = new CurrentStringNew();
            currentStringNew.currentStr = ans;
            currentStringNew.Pos = i;
            return currentStringNew;
        }
    
        public static void main(String[] args) {
            CurrentStringNew s = unpackString("3[xyz]4[xy]z", 0);
            System.out.println(s.currentStr);
        }
    }
    
    class CurrentStringNew {
        int Pos;
        StringBuilder currentStr;
    }

  • Как реализовать алгоритм рекурсией?

    @EternaLGreeD
    Wataru, большое спасибо. Вариант с передачей ещё одного дополнительного параметра StringBuilder помимо i и s мне нравится. Попробую переделать. Если не сложно можете дать какой-то совет по изучению рекурсивных алгоритмов? Когда начинается рекурсия с ветвлением или же рекурсивные вызовы внутри цикла, голова кругом идёт.
  • Как реализовать алгоритм рекурсией?

    @EternaLGreeD
    Wataru, Добрый день! Спасибо большое за решение, пытался решить аналогичную задачу правда на Java. Попробовал переписать алгоритм с python на java и понял, что для работы функции правильно нужно возвращать не только строку рекурсивно, но и позицию. Так вот, не могли бы подсказать как можно было бы переделать алгоритм, чтобы можно было обойтись возвратом одного значения?( Ведь в java нет возврата нескольких значений). Вроде бы несложно, но что-то не выходит. Заранее спасибо!