标签:另一个 示例 输入 length solution else 输出 while 回文
题目:
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
思路:
这个题目看着很简单,做起来好像也很简单...
最直接的方法就是转字符串反转比较即可,这样应该没问题。
另一个想到的就是将该整数的位数计算出来赋值与原数比较,过程应该会稍微复杂一些。
方法一:
转字符串反转判断是否相等,暴力直接。
class Solution(object):
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
a = str(x)
if a == a[::-1]:
return True
else:
return False
执行用时 :116 ms, 在所有 Python 提交中击败了86.58%的用户
内存消耗 :12.8 MB, 在所有 Python 提交中击败了7.14%的用户
或者:
通过length判断对应位置是否相等,一样的道理
class Solution(object):
def isPalindrome(self, x):
num = str(x)
for i in range(len(num)):
if num[i] != num[len(num)-1-i]:
return False
return True
执行用时 :144 ms, 在所有 Python 提交中击败了50.68%的用户
内存消耗 :12.7 MB, 在所有 Python 提交中击败了7.14%的用户
方法二:
无限地板除,直至为0则位数结束,取余数累加就是反转的值,结果需要考虑边界范围,不过提交没有报错,就不再添加。
class Solution:
def isPalindrome(self, x):
if x < 0:
return False
num = x
curNum = 0
while num !=0:
curNum = curNum*10 + num%10
num /=10
return curNum == x
行用时 :120 ms, 在所有 Python 提交中击败了84.11%的用户
内存消耗 :12.8 MB, 在所有 Python 提交中击败了7.14%的用户
方法三:
只考虑一半的计算,也就是说,如果x是回文数,那么它的一半反转的值应要等于其自身,这样就没必要循环计算到最后一位了
class Solution(object):
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
if x < 0 or (x % 10 == 0 and x != 0): #小于0,和尾数为0的情况都return false
return False
revNumber = 0
while x > revNumber:
revNumber = revNumber * 10 + x % 10
x /= 10
if x == revNumber or x == revNumber / 10: #相等为偶数情况,等于rev/10为奇数情况
return True
else:
return False
执行用时 :132 ms, 在所有 Python 提交中击败了69.37%的用户
内存消耗 :12.6 MB, 在所有 Python 提交中击败了7.14%的用户
标签:另一个 示例 输入 length solution else 输出 while 回文
原文地址:https://www.cnblogs.com/xiaoqiangink/p/12945171.html