题目描述
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
题目分析
为了正确进行转换,采用了字符串进行中间的转换操作。
首先判断输入数字的正负,保留数字的正负信息。然后将数字转换成字符串,对字符串进行翻转,对于新的字符串比较与边界值的大小关系,并输出正确的结果。
相较而言,python对于字符串的操作比较简单,且对于数字的取值范围相交C++和Java比较广,函数使用也比较方便,实现起来更容易。
代码实现
C++
/*
* @lc app=leetcode.cn id=7 lang=cpp
*
* [7] 整数反转
*/
// @lc code=start
class Solution {
public:
int reverse(int x) {
int sign = 1;//符号位,1:+,-1:-
if(x < 10 && x > -10){
return x;
}
if(x < 0){
sign = -1;
}
int shang = x, yu;
int flag = 0;//标志位,0:前导零部分,1:非前导零部分
string x_reverse = "";
while(shang != 0){
yu = shang % 10 * sign;
shang /= 10;
if(yu != 0){
flag = 1;
}
if(flag == 1){
x_reverse.push_back(yu+'0');
}
}
string max1 = "2147483647";
string max_1 = "2147483648";
if(x_reverse.size()==10){
if(sign == 1){
if(x_reverse > max1){
return 0;
}
}
else if(sign == -1 ){
if(x_reverse > max_1){
return 0;
}
}
}
int ans = 0;
for(int i = 0; i < x_reverse.size(); i++){
ans = ans*10 + (x_reverse[i]-'0');
}
return ans*sign;
}
};
// @lc code=end
Java
/*
* @lc app=leetcode.cn id=7 lang=java
*
* [7] 整数反转
*/
// @lc code=start
class Solution {
public int reverse(int x) {
int sign = 1;
if(x < 10 && x > -10){
return x;
}
int tmp = x;
while(tmp % 10 == 0){
tmp /= 10;
}
String x_input = String.valueOf(tmp);
if(x < 0){
sign = -1;
x_input = x_input.substring(1);
}
StringBuffer xb = new StringBuffer(x_input);
String x_reverse = xb.reverse().toString();
String max1 = "2147483647";
String max_1 = "2147483648";
if(x_reverse.length() == 10){
if(sign == 1){
if(x_reverse.compareTo(max1) > 0){
return 0;
}
}
else if(sign == -1){
if(x_reverse.compareTo(max_1) > 0){
return 0;
}
}
}
return Integer.parseInt(x_reverse)*sign;
}
}
// @lc code=end
Python
#
# @lc app=leetcode.cn id=7 lang=python3
#
# [7] 整数反转
#
# @lc code=start
class Solution:
def reverse(self, x: int) -> int:
sign = 1
if(x < 0):
sign = -1
x = -x
x_reverse = int(str(x)[::-1])*sign
if(x_reverse >= -2147483648 and x_reverse <= 2147483647):
return x_reverse
else:
return 0
# @lc code=end