本文主要是介绍5.回文数-leetcode 009(python),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
- 题目描述
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
- 示例1
输入: 121
输出: true
- 示例2
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
- 示例3
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
- 解决方案一
受题目启发,将整数转换为字符串,判断正序与倒序字符串是否相等
- 代码一
class Solution(object):def isPalindrome(self, x):""":type x: int:rtype: bool"""flag = Falsestr_1 = str(x)str_2 = str_1[::-1]if str_1 == str_2:flag = Truereturn flag
- 解决方案二
首先排除x是负数的情况,肯定不是回文数,然后依次比较x的最高位数字和最低位数字,需要借助一个记录当前数字x共有多少位的变量d,在比较的循环中,x需要不断去掉最高位和最低位,因此每进行一次循环,d就需要除以100
需要注意的是,while循环的条件是x>0,而不是x>=10,我第一次出错就是因为没想清楚这个道理。执行报错了才知道。如果输入是1000021的话,那么一次循环之后,x变为00002,仍旧需要在循环中进行比较,而如果按照x>=10的条件来执行,就会直接返回true的结果,出现错误。
- 代码二
class Solution(object):def isPalindrome(self, x):""":type x: int:rtype: bool"""flag = True#如果x是负数的话,肯定不是回文数if x < 0:flag = Falsereturn flag#计算x共有多少位d = 1while x/d >= 10:d = d * 10#循环取x的最高位和最低位,每次比较#即使x是个位数,也需要在循环中比较,可能出现x=00002的情况while x > 0:#q是x的最高位q = x/d#r是x的最低位r = x%10if q != r:flag = Falsereturn flag#去掉x的最高位和最低位x = x%d/10d = d / 100return flag
这篇关于5.回文数-leetcode 009(python)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!