給定一個 32 位有符號整數(shù)幽钢,將整數(shù)中的數(shù)字進行反轉(zhuǎn)棺克。
示例 1:
輸入:123輸出:321
示例 2:
輸入:-123輸出:-321
示例 3:
輸入:120輸出:21
注意:
假設(shè)我們的環(huán)境只能存儲 32 位有符號整數(shù),其數(shù)值范圍是 [?2^31, 2^31 ? 1]怠噪。根據(jù)這個假設(shè),如果反轉(zhuǎn)后的整數(shù)溢出,則返回 0晤柄。
思路:
1.輸入一個數(shù),逆序?qū)⒚總€字符存入集合中妖胀。
1.1如果輸入的負數(shù)芥颈,先求絕對值,再調(diào)用反轉(zhuǎn)函數(shù)赚抡,返回時加負號即可爬坑。
1.2為了減少空間使用量,直接將各個字符存入集合涂臣。如果使用數(shù)組的話盾计,需要先計算一次求出位數(shù),再計算一次放入數(shù)組赁遗。
2.集合中的字符和10的n次方對應(yīng)相乘求和署辉,得出反轉(zhuǎn)數(shù)。
2.1反轉(zhuǎn)數(shù)大于 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;
//輸入正數(shù)
if(x>0) {
rs=getResult(x);
return rs;
}
else{
//輸入負數(shù) 先求絕對值
x=Math.abs(x);
rs=getResult(x);
//返回負值
return -rs;
}
}
public static int getResult(int x) {
//該集合用來逆序存儲整數(shù)
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);
}
}