给定一个 32 位有符号整数,将整数中的数字进行反转。
示例 1:
输入:123输出:321
示例 2:
输入:-123输出:-321
示例 3:
输入:120输出:21
注意:
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−2^31, 2^31 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。
思路:
1.输入一个数,逆序将每个字符存入集合中。
1.1如果输入的负数,先求绝对值,再调用反转函数,返回时加负号即可。
1.2为了减少空间使用量,直接将各个字符存入集合。如果使用数组的话,需要先计算一次求出位数,再计算一次放入数组。
2.集合中的字符和10的n次方对应相乘求和,得出反转数。
2.1反转数大于 2^31 − 1,返回0。
代码:
package code_007_ReverseInteger;
import java.util.ArrayList;
import java.util.Scanner;
public class Test {
public static int reverse(int x) {
int rs=0;
//输入正数
if(x>0) {
rs=getResult(x);
return rs;
}
else{
//输入负数 先求绝对值
x=Math.abs(x);
rs=getResult(x);
//返回负值
return -rs;
}
}
public static int getResult(int x) {
//该集合用来逆序存储整数
ArrayList chs=newArrayList();
int rs=0;
while(x>0) {
//对10取余,加入集合
chs.add(x%10);
//x递归
x=x/10;
}
for(int i= 0;i<chs.size();i++){
//从最高位起 乘以10^(chs.size()-1-i)
rs=(int) (rs+chs.get(i)*Math.pow(10,chs.size()-1-i));
}
if(rs>((int)Math.pow(2, 31)-1)) {
//大于2^31-1,返回0
rs=0;
}
return rs;
}
public static void main(String[]args) {
Scanner scanner=newScanner(System.in);
int x=scanner.nextInt();
reverse(x);
}
}