題型解說
這是一題難度為簡單的題目
需要設計一個方法,此方法會傳入一個整數 x,將 x 反轉後輸出
範例:
x = 123,則回傳 321
x = -987,則回傳 -789
如果 x 反轉後溢位(超出 int 的範圍),則輸出 0
解題思路
此題可以由兩個思路來下手
一. 用數學的四則運算來求解
宣告一個 long 的變數(防止溢位) result,之後開始對 x 和 result 做運算,步驟如下
- 將 result * 10
- 對 x % 10 得到個位數
- 將第二步的結果加進 result
- 將 x / 10,因為整數相除會自動去除小數點,等同於把 x 的個位數移除
- 如果 x 不為 0,則回第一步
二. 將數字轉成字串後來求解
宣告一個 StringBuilder 的變數 sb 及 String 的變數 s
將 x 轉為字串放入 s 後,利用迴圈把 s 的每一個數字從右至左的放入 sb 中
最後將 sb 的結果輸出
程式碼
Java
第一種解法(效率較好 1ms)
class Solution {
public int reverse(int x) {
if (x == 0) {
return 0;
}
long result = 0;
while (x != 0) {
result = result *10 + x %10;
x /= 10;
}
if (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE) {
return 0;
}
return (int)result;
}
}
第二種解法(效率較差 2ms)
class Solution {
public int reverse(int x) {
if (x == 0) {
return 0;
}
StringBuilder sb = new StringBuilder();
String s = String.valueOf(x);
for (int i = s.length() -1; i > -1; i--) {
if (i == 0 && s.charAt(i) == '-') {
sb.insert(0, '-');
continue;
}
sb.append(s.charAt(i));
}
long result = Long.parseLong(sb.toString());
if (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE) {
return 0;
}
return (int)result;
}
}