回文数
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
进阶:
你能不将整数转为字符串来解决这个问题吗?
方法一:
# 字符串反转 class Solution: def isPalindrome(self, x): """ :type x: int :rtype: bool """ if x >= 0: # 负数肯定不是回文数 s_x = str(x)[::-1] # 反转字符串 return s_x == str(x) # 返回对比结果 else: return False s = Solution() print(s.isPalindrome(12323))
方法二:
# 反转整个整数 class Solution: def isPalindrome(self, x): y = x # 备份原数字 if x >= 0: half_num = 0 # 反转后的数字 while x != 0: # 循环取原数字中的每一位 half_num *= 10 half_num += x % 10 # 取x的个位数,half_num*10然后加上取到的数字 x //= 10 # 原数字减一位 return half_num == y # 循环结束得到最终的反转结果进行比对 else: return False
方法三:
# 反转获得一半的数字,然后跟剩下的匹配 class Solution: def isPalindrome(self, x): if x >= 0: half_num = 0 while half_num < x: # 上面那种方式是反转整个数字,其实取到了数字的一半与剩下的数字进行比对就可得到结果 half_num *= 10 half_num += x % 10 if half_num == 0: # 如果第一次half_num取到的结果是0说明原数字的个位为0,这种数字肯定不是回文数 return False x //= 10 if half_num == x: # 当half_num 大于或者=原数字时,结束循环,然后进行比对。 符合情况的数字123321 return True else: # 符合数字的情况 12321 half_num //= 10 return x == half_num else: return False s = Solution() print(s.isPalindrome(122100))
浙公网安备 33010602011771号