第7题 整数反转
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。
复习python知识点:
1.str[arg1:arg2:args3]
arg1,代表起始位置,包含当前下标的元素
arg2,代表结束为止,不包含当前下标的元素
arg3,代表步长,-1 为反转
x_str = x_str[:0:-1] 的意思就是:从最后一位开始,到第 0 个元素结束,但不包括第 0 个元素,也就是负号
2.abs(x) 函数返回数字x的绝对值。
3.取整除(//)
9//2 -->> 4
-9//2 -->> -5
4.位运算符(>>,<<)
(<<) 左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。
(>>) 右移动运算符:把">>“左边的运算数的各二进位全部右移若干位,”>>"右边的数指定移动的位数
a = 60 # 60 = 0011 1100
a << 2 ==240 # 240 = 1111 0000
a >> 2 ==15 # 15 = 0000 1111
5.条件表达式
<操作1> if <条件> else <操作2>
首先判断条件,如果为True,就执行操作1,否则执行操作22
python3
题解来自leetcode大佬解答0.0
解题1:
def reverse(self, x: int) -> int:
INT_MIN, INT_MAX = -2**31, 2**31 - 1
rev = 0
while x != 0:
# INT_MIN 也是一个负数,不能写成 rev < INT_MIN // 10
if rev < INT_MIN // 10 + 1 or rev > INT_MAX // 10:
return 0
digit = x % 10
# Python3 的取模运算在 x 为负数时也会返回 [0, 9) 以内的结果,因此这里需要进行特殊判断
if x < 0 and digit > 0:
digit -= 10
# 同理,Python3 的整数除法在 x 为负数时会向下(更小的负数)取整,因此不能写成 x //= 10
x = (x - digit) // 10
rev = rev * 10 + digit
return rev
解题2:
def reverse_better(
self,
x: int) -> int:
y, res = abs(x), 0
# 则其数值范围为 [−2^31, 2^31 − 1]
boundry = (1<<31) -1 if x>0 else 1<<31
while y != 0:
res = res*10 +y%10
if res > boundry :
return 0
y //=10
return res if x >0 else -res
解题3:
def reverse_force(self, x: int) -> int:
if -10 < x < 10:
return x
str_x = str(x)
if str_x[0] != "-":
str_x = str_x[::-1]
x = int(str_x)
else:
str_x = str_x[:0:-1]
x = int(str_x)
x = -x
return x if -2147483648 < x < 2147483647 else 0
第9题 回文数
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。
题解1:转化为字符串
class Solution:
def isPalindrome(self, x: int) -> bool:
str_x = str(x)
if str_x == str_x[::-1]:
return True
else:
return False
题解2:
在x<=rev_x 时,代表已经翻转了一半位数了
class Solution:
def isPalindrome(self, x: int) -> bool:
if (x < 0 or (x%10==0 and x !=0)):#x为负数或者最后一位是0的都不可能是回文数
return False
rev_x = 0
while(x > rev_x):#判断是否翻转了一半位数
rev_x = rev_x * 10 + x % 10
x/=10
return x == rev_x or x == (rev_x / 10) #当x的位数是奇数时,需要去掉末尾数字比较