标签:11 10 digit INT res 09 rev int 2021
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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。