9. 回文数(easy)

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。

  • show the code:
# code1:
class Solution:
    def isPalindrome(self, x: int) -> bool:
        if x < 0 or (x%10 == 0 and x != 0):
            return False
        res = 0
        while x > res:
            res = res*10 + x%10
            x //= 10
        return (x==res or x==res//10)
# code2
class Solution:
    def isPalindrome(self, x: int) -> bool:
        return (str(x)[::-1] == str(x))
  • 此题首先可以用字符串的方法做,直接[::-1]就完事了,非常简单,但这样的话会稍微消耗一点内存,毕竟生成了新的字符串,另外题目进阶也让我们考虑不使用字符串的方法。

  • 不使用字符串的话可以考虑如何在原整数上进行操作,即翻转一半的数字,如果一个数是回文数,那么它的后半段数字翻转应该等于前半段。

  • 如何获取后半段呢,我们可以对10取模同时整除10,比如‘12321’,我们首先得到1,然后是2,接下来将1乘以10加上2就是12,正好等于开头的数字12。

  • 当然,我们首先需要排除一些特殊情况,负数以及能被10整除的非零数肯定不是回文数。然后我们需要考虑数字位数奇偶情况,在跳出while循环的步骤中,如果是偶数位,那么前半部分正好等于后半部分,如果是奇数位,由于我们将x //= 10放在循环体后面,所以此时的前半部分x是要比后半部分res少一位的,比如‘12321’,此时x = 12 and res = 123,所以需要比较x == res//10

时间复杂度:lg(x),空间复杂度:(1)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 题目描述 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输...
    zhipingChen阅读 515评论 1 2
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 4,116评论 0 2
  • 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 12...
    bocsoft阅读 1,301评论 0 0
  • 先做Easy级别的题目吧~(由于刚开始刷还没规划好,这篇里面先夹杂了两道中等难度的题) 1-两数之和 要求 给定一...
    aaanthony阅读 821评论 0 0
  • 当狗子抬头看着我 好像在告诉我 望着我的眼睛,这样你就不会孤独 这一刻,世界仿佛静止了
    二十桥阅读 175评论 0 0

友情链接更多精彩内容