回文数(python)

链接:https://leetcode.cn/problems/palindrome-number
题目描述:
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。

回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

例如,121 是回文,而 123 不是。

示例 1:

输入:x = 121
输出:true

示例 2:

输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

示例 3:

输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。

提示:

− 2 31 < = x < = 2 31 − 1 -2^{31} <= x <= 2^{31} - 1 231<=x<=2311

思路

将整数转成字符串比较

代码

class Solution:
    def isPalindrome(self, x: int) -> bool:
        s=str(x)
        for i in range(len(s)//2):
            if s[i]!=s[len(s)-1-i]:
                return False
        return True
        #或者直接
        return s == s[::-1]

进阶

不将整数转为字符串来解决这个问题

负数均不是回文数。计算整数的位数,并使用两个指针从整数的两端开始向中间移动,获取指针所指的数字,并比较两个指针所指的数字是否相等。如果两个数字不相等,则该整数不是回文数,直接返回 False。如果两个数字相等,继续移动指针。如果指针移动结束后,仍未返回 False,则该整数是回文数,返回 True。

class Solution:
    def isPalindrome(self, x: int) -> bool:
        if x<0:
            return False
        if x == 0:  # 0 是回文数
            return True
        # 计算整数的位数
        num_digits = 0
        temp = x
        while temp != 0:
            num_digits += 1
            temp //= 10
        # 使用两个指针从整数的两端开始向中间移动
        left, right = 10 ** (num_digits - 1), 1
        while left >= right:
            left_digit = (x // left) % 10
            right_digit = (x // right) % 10
            if left_digit != right_digit:
                return False
            left //= 10
            right *= 10
        return True

你可能感兴趣的:(leetcode,算法,数据结构)