2021-11-09
作者:互联网
leetcode 刷题
python 语法
- / 和 // 的区别
在Python中“/”表示浮点数除法,返回浮点结果,也就是结果为浮点数,而“//”在Python中表示整数除法,返回不大于结果的一个最大的整数,意思就是除法结果向下取整。
整数反转
- 最先反映出来的是数字转字符,但是题目还要求判断反转后数是否越界
- 题解用数学解,“弹出” 用取模和除10,“推入”用乘10加上尾数,难点在于如何判断反转后的数是否越界
- 边界是 [-231,231-1],“推入”的计算公式是 rev*10+digital,而范围[-2147483648,2147483647],记最大值为INT_MAX;则根据这个范围可以推出当rev>INT_MAX/10,digital>=0时越界;当rev=INT_MAX/10,digital>7时越界;当rev<-INT_MAX/10,digital>=0越界;…总结规律
- 可以直接拿值来比较,如果rev>214748364,或者rev=214748364&&temp>7(负数边:rev<-214748364或者rev=-214748364&&temp<-8)
- 代码
class Solution:
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
class Solution {
public int reverse(int x) {
int res = 0;
while(x!=0) {
//每次取末尾数字
int tmp = x%10;
//判断是否 大于 最大32位整数
if (res>214748364 || (res==214748364 && tmp>7)) {
return 0;
}
//判断是否 小于 最小32位整数
if (res<-214748364 || (res==-214748364 && tmp<-8)) {
return 0;
}
res = res*10 + tmp;
x /= 10;
}
return res;
}
}
标签:11,10,digit,INT,res,09,rev,int,2021 来源: https://blog.csdn.net/LGY33/article/details/121233447