你如何检查给定的输入是否是回文?

How do you check if a given input is a palindrome?

我需要检查输入是否是回文。

我将输入转换为字符串,并使用列表切片将输入与输入的反向进行比较。我想学习一种不将输入转换为字符串的不同方式。

def palindrome(n):
   num = str(n)
   if num == num[::-1]:
      return True

还有以下两种方法:

  • Iterative Method: Run loop from starting to length/2 and check first character to last character of string and second to second last one and so on. If any character mismatches, the string wouldn’t be palindrome.

下面的示例代码:

def isPalindrome(str):  
    for i in xrange(0, len(str)/2):  
        if str[i] != str[len(str)-i-1]: 
            return False
    return True 
  • One Extra Variable Method: In this method, user take a character of string one by one and store in a empty variable. After storing all the character user will compare both the string and check whether it is palindrome or not.

下面的示例代码:

def isPalindrome(str):  
    w = "" 

    for i in str: 
        w = i + w 

    if (str==w): 
        return True
    return False

假设 n 是一个数字,您可以从右到左获取数字并用这些数字从左到右构建一个数字:

n = 3102
m = n
p = 0
while m:
     p = p*10 + m%10 # add the rightmost digit of m to the right of p
     m //= 10 # remove the rightmost digit of m

print(p) # 2013

因此函数:

def palindrome(n):
    m = n
    p = 0
    while m:
         p = p*10 + m%10
         m //= 10
    return p == n 

注意:

if num == num[::-1]:
    return True

will return None if num != num[::-1](函数结束)。你应该写:

if num == num[::-1]:
    return True
else:
    return False

或者(更短更简洁):

return num == num[::-1]

您可以尝试以下方法:

  1. 从数字中提取所有数字n
  2. 在每次迭代中,将数字附加到一个列表 (digits) 和另一个列表开头的那个数字 (reversed_digits)
  3. 提取完所有数字后,比较两个列表
def palindrome(n):
    digits = []
    reversed_digits = []
    while n > 0:
        digit = n % 10
        digits.append(digit)
        reversed_digits.insert(0, digit)
        n //= 10
    return digits == reversed_digits

注意:这可能不是解决这个问题最有效的方法,但我认为它很容易理解。