問題:
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
大意:
反轉(zhuǎn)一個(gè)整型數(shù)的數(shù)字的诵。
例1:x = 123, return 321
例2:x = -123, return -321
思路:
題目很簡(jiǎn)潔向图,注意是有負(fù)數(shù)的铛只。
我的方法比較直接萝玷,先轉(zhuǎn)成String,有負(fù)號(hào)就保留負(fù)號(hào)署惯,然后一個(gè)從尾部往前取數(shù)字铡买,從新字符串的頭部往后放,就反轉(zhuǎn)過來了茫多。最后再轉(zhuǎn)成int型返回。
這里使用了StringBuffer來加快拼接字符串的速度忽刽,不過依然沒有別人的方法快天揖。
注意題目很無(wú)聊的會(huì)傳超出int范圍的數(shù)字給你測(cè)試,明明參數(shù)寫明了是int型的還給超大數(shù)跪帝,那就只能做一個(gè)try-catch今膊,如果是超大數(shù)轉(zhuǎn)換失敗,那就直接返回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;
}
}
這個(gè)做法是直接左數(shù)字計(jì)算斑唬,每次取余得到最末尾的數(shù)字,取出來之后原數(shù)字除以10,取出來的數(shù)字加到新數(shù)字末尾去恕刘,不過新數(shù)字要先乘以10缤谎,也就是所有數(shù)字提高一位。他中間有個(gè)判斷 (newResult - tail) / 10 != result 雪营,其實(shí)也是為了防止超大數(shù)溢出弓千,如果溢出了就返回0。
合集:https://github.com/Cloudox/LeetCode-Record