在Java中将递归用于leetcode的回文问题

问题描述 投票:0回答:1

我如下所示的调试器代码,看起来一切都找到了,直到“返回真”。它不会立即返回,而是以某种方式返回。但是,当我调用方法本身时,我没有分配值。

我想如果我尝试使用while,那么在完成递归操作后会简单得多。

任何人都可以帮助我找出错误吗?

提前感谢!

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);
    }
} 
java recursion palindrome
1个回答
0
投票

我认为您的代码没有错。它似乎工作正常。您可能想要更改以下内容以包括方法调用的返回。

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

如果您能解释您认为哪里有问题,我会尽力帮助。

© www.soinside.com 2019 - 2024. All rights reserved.