注意边界判定
题目
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
进阶:
你能不将整数转为字符串来解决这个问题吗?
示例
示例 1:
示例 2:
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
解释: 从右向左读, 为 01 。因此它不是一个回文数。
考察知识点
边界值判断
核心思想
排除负数、个位数等特殊情况,然后按照除数取余的方法进行处理得到翻转之后的结果,与输入整数对比即可知是否是回文数。如果是回文数,显然不会溢出
Python版本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| class Solution: def isPalindrome(self, x: int) -> bool: if 0 <= x < 10: return True if x < 0: return False
back_up_x = x new_int = 0 while x!=0: new_int = new_int*10 + x % 10 x //= 10 if new_int == back_up_x: return True else: return False return True if new_int == back_up_x else False return new_int == back_up_x
|
- 一个更简洁的版本,判断到一半即可,如果后面一半和前面一半相等,自然是回文数字。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| class Solution: def isPalindrome(self, x: int) -> bool: if x<0 or (x%10==0 and x!=0): return False revertedNumber = 0 while x>revertedNumber: revertedNumber = revertedNumber * 10 + x % 10 x //= 10 return x==revertedNumber or x==(revertedNumber//10)
|
时间复杂度:\(O(\log_{10}(n))\) 空间复杂度:\(O(1)\)
Java版本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| class Solution { public boolean isPalindrome(int x) { if (x < 0 || (x % 10 == 0 && x != 0)) { return false; }
int revertedNumber = 0; while (x > revertedNumber) { revertedNumber = revertedNumber * 10 + x % 10; x /= 10; }
return x == revertedNumber || x == revertedNumber / 10; } }
|
有效语法糖
1、当函数返回值是布尔值的时候,可以直接返回判断式。
| if new_int==back_up_x: return True else: return False
return True if new_int==back_up_x else False
return new_int==back_up_x
|