7 Reverse Integer

Example

Example1: x = 123, return 321

Example2: x = -123, return -321

解題

Version 1

第一個想到的方式就是先用字串的方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var reverse = function (x) {

const INT_MAX = 2147483647;

const isNegativeNumber = (x < 0) ? true : false,
y = Math.abs(x).toString().split('')
length = y.length;

let result = [];
for (let i = 0; i < length; i++) {
result.push(y.pop());
}

let total = parseInt(result.join(''));

total = isNegativeNumber ? (0 - total) : total;
if (total > INT_MAX || total < -(1 + INT_MAX)) {
return 0;
} else {
return total;
}
};

我先確定他是否為負數

然後把數字轉絕對值 切一維陣列

在使用for 迴圈來迴轉

最後檢查是否有超出32 bit與回傳正負總值

但是這樣的效能實在欠佳

Version 2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var reverse = function (x) {
if (x >= 0 && x < 10) {
return x;
}
const INT_MAX = 2147483647;

const isNegativeNumber = (x < 0) ? true : false,
y = Math.abs(x).toString().split(''),
length = y.length;

let total = 0;
y.map((v, index) => {
const value = parseInt(v) * Math.pow(10, index);
total += value;
})
total = isNegativeNumber ? (0 - total) : total;
if (total > INT_MAX || total < -(1 + INT_MAX)) {
return 0;
} else {
return total;
}
};

第二種方式其實跟第一種大同小異

只是我是利用數字十進位數的方式

使用迴圈加回去一個值

最後再檢查是否有超出32 bit

因為使用數字計算

所以效能提昇了不少

最高衝到了51 %

不過還是略有欠缺

若有其他解法再來更新