題目
給出一個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。
示例 1:
輸入: 123
輸出: 321
示例 2:
輸入: -123
輸出: -321
示例 3:
輸入: 120
輸出: 21
注意:
假設我們的環(huán)境只能存儲得下 32 位的有符號整數,則其數值范圍為 [?231, 231 ? 1]。請根據這個假設,如果反轉后整數溢出那么就返回 0。
解題:
public int reverseOwn(int x ){
//為了反轉,首先想到的是得拿個位、十位、百位、千位等位上的數;
//如何拿?把整型轉字符串,再依次取每個位上的數字,拿完再反轉,好像不是這道題考驗我們的本意;
//所以還是按照數學思維:假設現在數據是321,想拿到1 ,321除10的余數就可以,那么如何拿到2呢?
//想想,是不是還是按照之前的思路,但只不過是32除10的余數?這樣也無需考慮正負數的問題。
//所以總結上面的思路就是:x%10(得到當前的個位),再x/10,為取下一個個位數做準備。一直循環(huán)到x!=0.
//防止溢出,先用long接收
long rev=0;
while (x!=0){
int p = x%10;
x=x/10;
rev = rev*10 + p;
//防止每次循環(huán)完的rev,可能已溢出的問題,考慮反轉后不溢出的問題,溢出則返回0
if(rev>Integer.MAX_VALUE||(rev<Integer.MIN_VALUE)){
return 0;
}
}
return (int)rev;
}
結果
執(zhí)行用時 :3 ms, 在所有 Java 提交中擊敗了95.97%的用戶
內存消耗 :34.6 MB, 在所有 Java 提交中擊敗了77.84%的用戶