我有以下功能
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
但是,如果我给它任何价值,它就不会返回任何东西。我确定这是一个基本错误,但我似乎无法看到我出错的地方
答案 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的数组,具体取决于原始字符串的长度是偶数还是奇数。