ruby中的回文函数终止而没有返回值

时间:2015-10-12 19:31:26

标签: ruby

我有以下功能

def isPalindrome(n)
    a = n.to_s
    if a.length == 1 || a.length == 0
        return true
    else
        first_letter = a[0]
        last_letter = a[a.length - 1]
        if first_letter != last_letter
            return false
        else
            return isPalindrome(a[1..a.length-2].to_i)
        end
    end
end

但是,如果我给它任何价值,它就不会返回任何东西。我确定这是一个基本错误,但我似乎无法看到我出错的地方

1 个答案:

答案 0 :(得分:1)

您可以通过多种方式查看Palindrome。

递归方式:

def palindrome?(n)
  if n.length == 1 || n.length == 0
    true
  else
    if n[0] == n[-1]
      palindrome?(n[1..-2])
    else
      false
    end
  end
end

使用Ruby的.reverse方法:

def isPalindrome(n)
 n.downcase == n.reverse.downcase ? true : false
end

考虑回文词的另一种方法是将字符串分解为每个表示列表中位置的字符数组。例如,分为数组的“civic”一词为我们提供了["c","i","v","i","c"]。然后,我们可以检查后部字符“c”是否等于前面的字符“c”,每次条件为真时移除后部和前部。

 def isPalindrome(n)
            new_char = n.split("")
            answer = false
            while new_char.length > 1
                if new_char[0] == new_char[-1]
                    answer = true
                else
                    answer = false
                    break
                end
                new_char.pop
                new_char.shift
            end
            answer
        end

由于我们可以在数组中移动和弹出字符,因此我们可以比较它们并仅在它们匹配时继续。我们可以保持匹配数组的后端,直到我们用完字符或留下大小为1的数组,具体取决于原始字符串的长度是偶数还是奇数。