标签:10 return 记录 int rev re parseInt leetcode 刷题
7、整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
- 假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
难度:简单 题目地址:https://leetcode-cn.com/problems/reverse-integer/
1、C语言代码:
int reverse(int x){
long res = 0;
while(x != 0){
res = res * 10 + x % 10;
if (res > INT_MAX || res < INT_MIN) {
return 0;
}
x /= 10;
}
return res;
}
解释: 直接倒序翻转x,判断res是否溢出,如果溢出直接返回0。
知识点回顾: INT_MAX和INT_MIN表示C语言中int的上下限,在标准头文件limits.h中定义。
2、Java代码:
class Solution {
public int reverse(int x) {
int rev = 0;
while (x != 0) {
int pop = x % 10;
x /= 10;
if (rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE / 10 && pop > 7)) return 0;
if (rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE / 10 && pop < -8)) return 0;
rev = rev * 10 + pop;
}
return rev;
}
}
解释: 方法:弹出和推入数字 & 溢出前进行检查,我们可以一次构建反转整数的一位数字。在这样做的时候,我们可以预先检查向原整数附加另一位数字是否会导致溢出。
反转整数的方法可以与反转字符串进行类比。我们想重复“弹出” xxx 的最后一位数字,并将它“推入”到 rev的后面。最后,rev 将与 xxx 相反。要在没有辅助堆栈 / 数组的帮助下 “弹出” 和 “推入” 数字,我们可以使用数学方法。
但是,这种方法很危险,因为当 temp=rev*10+pop 时会导致溢出。
幸运的是,事先检查这个语句是否会导致溢出很容易。
为了便于解释,我们假设 rev 是正数。
如果 temp=rev*10+pop 导致溢出,那么一定有 rev≥INTMAX/10。
如果 rev>INTMAX/10,那么 temp=rev*10+pop一定会溢出。
如果 rev==INTMAX/10,那么只要 pop>7,temp=rev*10+pop 就会溢出。
当 rev为负时可以应用类似的逻辑。
知识点回顾: 判断溢出的方法。
3、Python代码:
class Solution:
def reverse(self, x: int) -> int:
flag = -1 if x < 0 else 1
res = flag * int(str(abs(x))[::-1])
return res if (-2**31)<=res<=(2**31-1) else 0
解释: 利用切片进行反转,加上了对溢出的判断。
知识点回顾: 数字类型之间的转化,切片的使用。判断溢出的方法。数值对象不可能之间用切片。
4、JavaScript代码:
/**
* @param {number} x
* @return {number}
*/
var reverse = function (x) {
var re = 0;
while (parseInt(x / 10)) {
re = 10 * re + x - 10 * parseInt(x / 10);
x = parseInt(x / 10);
}
if (re > 214748364 || re < -214748364) return 0;
if ((re == 214748364 && x > 7) || (re == 214748364 && x < -8)) return 0;
re = 10 * re + x;
return re
};
解释: 类似于Java求解的思路。
知识点回顾:
1、parseInt() 函数可解析一个字符串,并返回一个整数。
语法:parseInt(string, radix)
string:必需。要被解析的字符串。
radix:可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。
返回值:返回解析后的数字。
说明:当参数 radix 的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数。
举例,如果 string 以 “0x” 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数。如果 string 以 0 开头,那么 ECMAScript v3 允许 parseInt() 的一个实现把其后的字符解析为八进制或十六进制的数字。如果 string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。
标签:10,return,记录,int,rev,re,parseInt,leetcode,刷题 来源: https://blog.csdn.net/qq_41278826/article/details/100065117
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。