1. 程式人生 > >(LeetCode每日一刷02)反轉整數

(LeetCode每日一刷02)反轉整數

題目描述:

給定一個 32 位有符號整數,將整數中的數字進行反轉。

注意:

假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 [−2^21,  2^31−1]。根據這個假設,如果反轉後的整數溢位,則返回 0。

 

示例:

示例 1:

輸入: 123
輸出: 321

 示例 2:

輸入: -123
輸出: -321

示例 3:

輸入: 120
輸出: 21

 

我提交的程式碼:

​
class Solution {
public:
    int reverse(int x) {
        bool symbol = 1;   //預設x為正數
        int remainder;     //餘數
        std::vector<int> numVec;  //存放每一位上的數字
        
        if (x == 0)    //0作為特殊處理
            return 0;
              
        if (x < 0)    //負數取餘特殊,直接轉成正數
        {
            x = abs(x); 
            symbol = 0;
        }
        
        for(; x != 0; )
        {
            remainder = x % 10;
            numVec.push_back(remainder);
            x = x / 10;
        } 
        
        int vector_size = numVec.size();
        int i;
        double rslt = numVec[vector_size - 1]; //這裡要設定為double,不然後面會溢位
        for (i = 0; i < vector_size - 1; i++)
        {
            int j = vector_size - i - 1;
            rslt = rslt + numVec[i] * pow(10,j);
        }
        
        if (symbol == 0)
        {
            rslt *= -1;
        }
        
        if(rslt > pow(2,31) - 1 || rslt < (-1 * pow(2,31)))
        {
            rslt = 0;
        }
        
        return rslt;
    }
};

​

程式碼執行時間:16ms。大概75.71% 的使用者。