整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例1:
输入: 123
输出: 321
示例2:
输入: -123
输出: -321
示例3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
解题思路:
先把数分为正数和负数两个区间,再分别进行溢出的判断:
1、如果给定的数大于等于0,将数转化为字符串再进行反转再转换为整数
- 若大于231,则返回0
- 否则,返回反转后的数
2、如果给定的数小于0,先取绝对值,再转化为字符串再进行反转再转换为整数
- 因为进行了取绝对值,所以若绝对值大于2^31,则返回0
- 否则,返回(-反转后的数)
代码:
class Solution:
def reverse(self, x: int) -> int:
if x>=0:
x=int(str(x)[::-1])
if x>pow(2,31):
return 0
else:
return x
else:
x=int(str(abs(x))[::-1])
if x>pow(2,31):
return 0
else:
return -x
注:
其中用到的知识点
1、pow()函数:里面可以有两个或三个参数
- pow(x,y):表示x的y次幂
>>>pow(2,4)
16
- pow(x,y,z):表示x的y次幂除以z的余数
>>>pow(2,4,5)
1
2、Python切片
Python中符合切片并且常用的有:列表,字符串,元组
下面以列表为例解释一下
[start : end : step]
- start:切片的起始位置
- end:切片的结束位置(不包括在内)
- step:步长间隔,可以不提供,默认是1
步长为正表示正序
>>> list=[0,1,2,3,4,5]
>>> print(list[:]) #默认全部输出
[0, 1, 2, 3, 4, 5]
>>> print(list[0:3]) #输出索引为0-3但不包括3
[0, 1, 2]
>>> print(list[:3]) #0可以省略
[0, 1, 2]
>>> print(list[0:5:2]) #默认步长是1,改为2
[0, 2, 4]
>>> print(list[0:-1]) #负数表示从结尾开始
[0, 1, 2, 3, 4]
>>> print(list[-1:]) #倒数第一个到结尾
[5]
>>> print(list[-3:-1]) #倒数第3个到倒数第1个,不包括倒数第1个
[3, 4]
>>> print(list[3:2]) #start比end大无输出
[]
>>> list[2:2]=['a','b'] #插入
>>> print(list)
[0, 1, 'a', 'b', 2, 3, 4, 5]
>>> list[0:2]=['a','b'] #替换
>>> print(list)
['a', 'b', 2, 3, 4, 5]
>>> del list[2:4] #删除
>>> print(list)
[0, 1, 4, 5]
步长为负表示倒序
>>> list=[0,1,2,3,4,5]
>>> print(list[::-1]) #从结尾开始,翻转
[5, 4, 3, 2, 1, 0]