# 7. Reverse Integer

## 1.問題

![](https://901207480-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LGKoChvN9am4__HCIRK%2F-LLKPJ2GSpd-4INrtH12%2F-LLKRYeN3l40kuslTmRS%2F2018090101.jpg?alt=media\&token=23999dc8-73e6-4a07-bf1f-027bad0acec3)

## 2.想法

* 提問
* function header, parameter
* test input: integer overflow
* 說明想法
  * 直覺想法: 將每個位數放進vector後, 再加回答案
  * 改進做法: 每次疊代就將原還得值處以10, 但要記得處理overflow
* 測試
* 計算複雜度: O(n)?

## 3.程式碼

* 直覺想法

```
class Solution {
public:
    int reverse(int x) {
        int index = 1, sum = 0;
        vector<int> res;
        while (int(abs(x) / pow(10, index - 1)) > 0) {
            res.push_back(int(abs(x) % int(pow(10, index)) / pow(10, index - 1)));
            index++;
        }
        for (int i = 0; i < res.size(); i++) {
            sum += res[i] * pow(10, index - 2);
            index--;
        }
        if (0 > sum) {
                return 0;
            }
        return x < 0 ? -sum : sum;
    }
};
```

* 改進做法

```
class Solution {
public:
    int reverse(int x) {
        int index = 1, sum = 0;
        int t = abs(x);
        while (t > 0) {
            if(sum > INT_MAX/10 || sum<INT_MIN/10){
                return 0;
            }
            int res = t % 10;
            sum = sum * 10 + res;
            t = t /10;
        }
        
        return x < 0 ? -sum : sum;
    }
};
```

## 4.Performance
