Использование рекурсии в java для палиндромного вопроса по leetcode - PullRequest
0 голосов
/ 21 января 2020

Я показываю код отладчика, показанный ниже, и каждая вещь выглядит найти, пока "не вернет true". Он не возвращается сразу, вместо этого он вернулся как-то. Однако я не присваиваю значение при вызове самого метода.

Я думаю, что если я попытаюсь использовать while, было бы намного проще после того, как я завершу sh рекурсию.

Может кто-нибудь помочь мне разобраться в ошибке?

Заранее спасибо!

class Solution {
    public boolean isPalindrome(String s) {
        s = s.toUpperCase();
        return isPalindromeHelper(s, 0, s.length() - 1);
    }
    public boolean isPalindromeHelper(String s, int first,int last) {
        if(first >= last) {
            return true;
        } else {
            char chead = s.charAt(first);
            char ctail = s.charAt(last);
            if(!Character.isLetterOrDigit(chead) || !Character.isLetterOrDigit(ctail)) {
                if(!Character.isLetterOrDigit(chead)) {
                    first++;
                }
                if(!Character.isLetterOrDigit(ctail)) {
                    last--;
                }
                isPalindromeHelper(s, first, last); 
            } 
            else if(chead != ctail) {
                return false;
            }
        }
        first++;
        last--;
        return isPalindromeHelper(s, first, last);
    }
} 

1 Ответ

0 голосов
/ 21 января 2020

Я не вижу ничего плохого в вашем коде. Кажется, работает нормально. Вы можете изменить следующее, чтобы включить возврат в вызов метода.

              if(!Character.isLetterOrDigit(ctail)) {
                    last--;
                }
              return isPalindromeHelper(s, first, last);  // <- added return

Если вы можете объяснить, где, по вашему мнению, возникла какая-либо проблема, я постараюсь помочь.

...