题目内容
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer
算法思想
从该算法中首先会有两种思想:
- 第一种:通过numSingle=num%10和num=num/10来求。
- 第二种:通过字符串逆置来求。
这里通过第二种方法来实现数字反转,实现具体步骤如下:
- 判断所求的数是正数还是负数,若为正,则正负标记numCount=1。否则numCount=-1且数x=-x
if(x<0){
numCount=-1;
x=-x;
}else {
numCount=1;
}
- 将操作后的数值x,类型强制转换为String类型,然后从后往前逆置字符串。
- 将逆置后的字符串转换为int类型,这里通过try…cache来进行溢出处理。
try{
int actualNum=Integer.valueOf(numString.trim());
actualNum=numCount*actualNum;
return actualNum;
}catch (Exception e){
return 0;
}
整体算法
public class Day_07 {
static Scanner input=new Scanner(System.in);
public static int reverse(int x) {
int target=0;
int numCount=0;
String numString=new String();
if(x<0){
numCount=-1;
x=-x;
}else {
numCount=1;
}
String s=String.valueOf(x);
for (int i = s.length()-1; i >=0 ; i--) {
if(target==0&&s.charAt(i)==0){
continue;
}else{
numString+=s.charAt(i);
target=1;
}
}
try{
int actualNum=Integer.valueOf(numString.trim());
actualNum=numCount*actualNum;
return actualNum;
}catch (Exception e){
return 0;
}
}
public static void main(String[] args) {
int x=input.nextInt();
System.out.println(reverse(x));
}
}
尾语
以上属于个人见解,有好的想法可以在下方评论写出自己的想法,大家一起进步。该题是力扣上的题,若有侵权,请及时告知。该题链接:https://leetcode-cn.com/problems/reverse-integer