問題:
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
大意:
反轉一個整型數的數字。
例1:x = 123, return 321
例2:x = -123, return -321
思路:
題目很簡潔,注意是有負數的。
我的方法比較直接,先轉成String,有負號就保留負號,然后一個從尾部往前取數字,從新字符串的頭部往后放,就反轉過來了。最后再轉成int型返回。
這里使用了StringBuffer來加快拼接字符串的速度,不過依然沒有別人的方法快。
注意題目很無聊的會傳超出int范圍的數字給你測試,明明參數寫明了是int型的還給超大數,那就只能做一個try-catch,如果是超大數轉換失敗,那就直接返回0。
代碼(Java):
public class Solution {
public int reverse(int x) {
String xStr = String.valueOf(x);
String reverse = "";
int start = 0;
if (xStr.charAt(0) == '-') {
reverse = "-";
start = 1;
}
StringBuffer reverseBuffer = new StringBuffer(reverse);
for (int i = xStr.length()-1; i >= start; i--) {
reverseBuffer.append(xStr.charAt(i));
reverse = reverse + xStr.charAt(i);
}
reverse = reverseBuffer.toString();
try {
return Integer.valueOf(reverse).intValue();
} catch (NumberFormatException e) {
return 0;
}
}
}
他山之石:
public class Solution {
public int reverse(int x)
{
int result = 0;
while (x != 0)
{
int tail = x % 10;
int newResult = result * 10 + tail;
if ((newResult - tail) / 10 != result)
{ return 0; }
result = newResult;
x = x / 10;
}
return result;
}
}
這個做法是直接左數字計算,每次取余得到最末尾的數字,取出來之后原數字除以10,取出來的數字加到新數字末尾去,不過新數字要先乘以10,也就是所有數字提高一位。他中間有個判斷 (newResult - tail) / 10 != result ,其實也是為了防止超大數溢出,如果溢出了就返回0。
合集:https://github.com/Cloudox/LeetCode-Record