【python】【leetcode】【算法题目9—Palindrome Number】

一、题目描述

题目原文:

Determine whether an integer is a palindrome. Do this without extra space.

(不用额外的空间来判断一个整形数字是不是回文数)

Some hints:

Could negative integers be palindromes? (ie, -1)

If you are thinking of converting the integer to string, note the restriction of using extra space.

You could also try reversing an integer. However, if you have solved the problem "Reverse Integer",

you know that the reversed integer might overflow. How would you handle such case?

There is a more generic way of solving this problem.

(思考:1、负数有没有回文数?

2、若你想转化为字符串做题,你要考虑到不能用额外空间的限制。

3、你也可以反转整数来操作,但要注意翻转后可能会溢出)

二、题目分析

思路:

首先,我们需要知道负数是没有回文数一说的。

其次,根据提示,思路1:将整形数字转化为字符串来制作。因为回文数是关于中间位置对称的,转化后根据数组下标,来进行首尾

判等操作即可(根据奇偶分为两种情况,奇数的中位数不用进行判断,且每种情况中,要判等的首位两个

数下标和为串长lenth - 1)。

思路2:将整形数字反转后与原数字判等即可,Reverse Integer题目链接如下:

http://blog.csdn.net/u014615155/article/details/53258668

我选择的是思路1,因为要考虑到不用额外空间的问题,我觉得类型转化过程中可能会有空间的浮动变化,但应该没有思路2直接开辟

新空间对空间的需求 那么多。

三、Python代码

class Solution(object):
    def isPalindrome(self, x):
        """
        :type x: int
        :rtype: bool
        """
        #我们要知道负数不是回文数
        if x < 0:
            return False
            
        #转化为字符串,用下标来判断
        x = str(x)
        lenth = len(x)
        
        #用&操作来判定是奇数还是偶数,注意下标的匹配问题(每一对收尾判断相同的两个数的下标和恰为lenth-1)。
        if lenth & 1 == 0:
            for i in range(0, lenth / 2):
                if x[i] != x[lenth - i - 1]:
                    return False
        else:
            for i in range(0, (lenth + 1) / 2):
                if x[i] != x[lenth - i - 1]:
                    return False
        return True

四、其他

题目链接:https://leetcode.com/problems/palindrome-number/

Runtime: 221 ms

想法不够优化,欢迎大家留言交流~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值