題目
7. Reverse Integer
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
第一次提交
第一次提交思路:
先除一些特殊情況,比如-9到9可以直接返回, Integer.MIN_VALUE這個數很特殊,這個值求絕對值還是它自身,原因爲它求絕對值會發生正溢出。然後排除末位的0,然後就利用字符串進行反轉,事實證明,這種做法把簡單的問題複雜化了。
第一次提交代碼:
public int reverse(int x)
{
boolean flag = true;
if(x == Integer.MIN_VALUE)
return 0;
if(x < -9)
{
flag = false;
x = Math.abs(x);
}
else if(x < 10)
return x;
while(x%10==0)
x /= 10;
String s = String.valueOf(x);
char[] s_char = s.toCharArray();
StringBuilder stringBuilder = new StringBuilder();
for(int i = s_char.length-1; i>=0; i--)
{
stringBuilder.append(s_char[i]);
}
long tmp = Long.parseLong(stringBuilder.toString());
if(tmp > Integer.MAX_VALUE)
x = 0;
else
x = (int)tmp;
return flag?x:0-x;
}
第一次結果細節(圖):
第二次提交
第二次提交思路:
開始還是把特殊情況都排除掉。然後利用數學規律進行反轉,具體如代碼註釋。
第二次提交代碼:
public int reverse(int x)
{
if(x > -10 && x < 10) //一位數直接返回
return x;
if(x == Integer.MIN_VALUE) //特殊,這個值求絕對值還是它自身,原因爲它求絕對值會發生正溢出
return 0;
int flag = x > 0 ? 1 : -1; //記錄下符號
x = Math.abs(x);
long result = 0;
while(x != 0)
{
int tmp = x % 10;
result = result * 10 + tmp; //反轉
x /= 10;
}
return result > Integer.MAX_VALUE ? 0 : flag * (int) result;
}
第二次結果細節(圖):
總結
對於純數字的操作,看來還是用數字來效率更高。