⛅不再平躺,每日一卷(day11)
目录
题目:
给你一个整数 x
,如果 x
是一个回文整数,返回 true
;否则,返回 false
。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
🌠示例 1:
输入:x = 121
输出:true
🌠示例 2:
输入:x = -121
输出:false
原由:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
🌠示例 3:
输入:x = 10
输出:false
原由:从右向左读, 为 01 。因此它不是一个回文数。
题目分析:
题目简单易懂,如果是负数,那就肯定不是回文数了。如果是正数就将转置(首尾颠倒),要是和原数一样就是回文数。
解题思路:
将所给的数转置后判断转置后是否和原数相同
1.转置数字
2。判断转置后数值和原数值是否相通
如何转置数字?
我们知道数值是一个常量,不能直接对其进行位置的转换,但是列表可以
所以可以进行如下转化
❄如何将数字转化成字符串?
str()可以将数字或者将其他参数转化成字符串
例:str(123)
输出:'123'
❄如何将字符串转化成列表?
因为字符串可以迭代,所以可以遍历字符串并将其加入列表。
❄如何转置列表?
使用切片方法[::-1]
例:list = [1,2,3]
print( list[::-1])
输出:[3,2,1]
值得注意的是:python有专门的方法reverse()将列表转置
但是使用这个方法没有返回值
例:list = [1,2,3]
print( list.reverse())
输出:None(无输出)
代码实现
常规解法:
def isPalindrome(x):
number = []
for i in str(x): # 带有负号为负数,不是回文数
if i == '-':
return False
else:
number.append(int(i)) # 遍历的i为字符串,用int()将字符串转化为数值
lst = number[::-1] # lst为转置列表
return lst == number
优化一下(发现字符串也可以用[::-1]转置
def isPalindrome(x):
return x>-1 and str(x)[::-1]==str(x)
双指针解法:
在列表首尾放入两个指针,不断移动首尾指针直到重合,并判断指针所在值是否相同
def isPalindrome(x):
# 先将数值转化为列表
number = []
r = 1
for i in str(x):
if i != '-':
number.append(int(i))
else:
return False
j = 0 # 放入指针
k = len(number) - 1
for t in range(len(number)//2): # 指针移动的次数为列表长度的一半
if number[j] == number[k]:
j += 1
k -= 1
r *= 1
else:
r *= 0
return r == 1
优化一下
def isPalindrome(x):
lst = list(str(x)) # 不用int()转换,用list()生成列表
j, k = 0, len(lst)-1
while j <= k:
if lst[j] != lst[k]:
return False
j += 1
k -= 1
return True
完成。
❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄end❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄