题目:给出一个32位有符号整数,将这个整数中每位上的数字进行反转。若反转后整数溢出,则返回0。
例:123->321 -123->-321
题解:
一、暴力法
def reverse_force(self, x: int) -> int:if -10 < x < 10:return xstr_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 = -xreturn x if -2147483648 < x < 2147483647 else 0作者:boywithacoin_cn链接:https://leetcode-cn.com/problems/reverse-integer/solution/pythondan-chu-he-tui-ru-shu-zi-yi-chu-qian-jin-xin/来源:力扣(LeetCode)著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
知识点:
list固定间隔抽取元素
x=[1,2,3,4,5,6]
x[start::step]
例:抽取所有偶数索引的元素
x[::2]=[1, 3, 5]
x[0::2]=[1, 3, 5]
例:抽取所有奇数索引的元素
x[1::2]=[2, 4, 6]
例:列表反转
x[::-1]=[6, 5, 4, 3, 2, 1]
x[::-2]=[6, 4, 2]
注:列表反转本质上仍然是从list中按固定间隔抽取,只是起始位置和步长都设为-1所以反着取
例:倒序取值
x[1::-1]=[2, 1]
x[0::-1]=[1]
例:对某个索引之后的切片进行倒序取值
x[:pivot:step]
x[:0:-1]=[6, 5, 4, 3, 2]
x[:0:-2]=[6, 4, 2]
x[:0:-3]=[6, 3]
x[:1:-1]=[6, 5, 4, 3]
有符号数、无符号数、数据位宽
有符号32位整型:
无符号32位整型:个位宽的二进制数共可以表达
种取值
二、优化法
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
作者:boywithacoin_cn
链接:https://leetcode-cn.com/problems/reverse-integer/solution/pythondan-chu-he-tui-ru-shu-zi-yi-chu-qian-jin-xin/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
知识点:
移位运算
1<<0=1=1
1<<1=2=10
1<<2=4=100
3<<0=3=11
3<<1=6=110
3<<2=12=1100
以此类推,表示将二进制数1向左移位
次。并且每向左移一位,数值乘2。
16>>0=16=10000
16>>1=8=1000
16>>2=4=100
3>>0=3=11
3>>1=1=1
3>>2=0=0
右移同理,并且每向左移一位,数值除以2,但右移后最低位会消失。
十进制数中取某一段
123%10=3
123%100=23
123%1000=123
(123%100-123%10)//10=2#十位
(123%1000-123%100)//100=1#百位
以此类推,一个位十进制整数的右
位=
一个位十进制整数的右数第
位=
