Leetcode--回文数(9)
题目描述:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
输入:121 输出:True 输入:-121 输出false
解题思路:明显,这题跟之前的反转字符串类似(这说明刷题大概是有用的吧,毕竟有思路了(ง •_•)ง)。
思路一:暴力转换字符串
class Solution: def isPalindrome(self, x: int) -> bool: if (x<0): return False else: str_x = str(x) i = 0 j = len(str_x)-1 while (i < j): if (str_x[i] == str_x[j]): i += 1 j -= 1 else: return False return True
参考了大佬的写法后,发现自己的代码实在是过于复杂,一行搞定。(继续练习>︿<)
class Solution: def isPalindrome(self, x: int) -> bool: return str(x)[::-1] == str(x)
思路二:同反转字符串,利用栈的思想。
对思路二的改进:由于回文数的前半部分和后半部分的倒序应该是一样的,因此在循环的时候只需要读一半即可。
那怎么判断已经循环了一半了呢?将原始数字除以10,再将反转后的数字乘以10,如果原始数字/10小于反转后的数字*10时,则说明已经处理了一半位数的数字。
class Solution: def isPalindrome(self, x: int) -> bool: if (x < 0 or (x % 10 == 0 and x != 0)): return False rev = 0 while(x>rev): rev = rev*10 + x % 10 x = x//10 if(x == rev or x == rev//10): return True else: return False