leetcode系列之回文数

164 阅读1分钟

1.题目描述

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。

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

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

2.示例

示例 1:

输入:x = 121
输出:true

示例 2:

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

示例 3:

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

提示:

-231 <= x <= 231 - 1

进阶:

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

3.题解

3,1 第一次的提交

思路分析

最开始的想法就是直接将数字转换为字符串,将判断数字是否为回文数的问题转换为判断反转后的字符串是否与原字符串相等的问题上来。当然,字符串处理相比较来说是很高效的,代码也很简洁。

class Solution:
    def isPalindrome(self, x: int) -> bool:
        if str(x)[::-1] == str(x):
            return True
        return False

result:

image-20220528222414455.png

3.2 第二次的提交

思路分析

看到题目中说不采取将整数转为字符串的方法,所以就有下面的方法。该方法的思路是从个位到最高位,依次获取各个进制位的数字(通过对10取余),然后再将上次得到的数字乘以10与本次得到的数字进行相加。

class Solution:
    def isPalindrome(self, x: int) -> bool:
        b = 0
        a = x
        while (x>=10):
            b = x % 10 + b * 10
            x = x//10
        b = x % 10 + b * 10
        if b == a:
            return True
        return False

result:

image-20220528222435040.png