版權聲明:本文為博主原創文章,未經博主允許不得轉載。
難度:容易
要求:
將一個整數中的數字進行顛倒,當顛倒后的整數溢出時,返回 0 (標記為 32 位整數)。
樣例
給定 x = 123,返回 321
給定 x = -123,返回 -321
思路:
通過對數字模十取余得到它的最低位。其實本題考查的是整數相加的溢出處理,檢查溢出有這么幾種辦法:
- 兩個正數數相加得到負數,或者兩個負數相加得到正數,但某些編譯器溢出優化的方式不一樣
- 對于正數,如果最大整數減去一個數小于另一個數,或者對于負數,最小整數減去一個數大于另一個數,則溢出。這是用減法來避免加法的溢出。
- 使用long來保存可能溢出的結果,再與最大/最小整數相比較
/**
* @param n the integer to be reversed
* @return the reversed integer
*/
public int reverseInteger(int x) {
long result = 0;
int tmp = Math.abs(x);
while (tmp > 0) {
result *= 10;
result += tmp % 10;
if (result > Integer.MAX_VALUE) {
return 0;
}
tmp /= 10;
}
return (int) (x >= 0 ? result : -result);
}
思路:
先將數字轉化為字符串,然后將字符串倒序輸出,并轉回數字。記得需要去除首部多余的0。