1. 程式人生 > 實用技巧 >leetcode 7.整數反轉

leetcode 7.整數反轉

看到這題最直接的思路,是想著先轉化為字串再反轉,然後轉化為整數輸出。轉化為輸出的時候需要考慮溢位的情況。而且如何對負數的字串進行處理每個人也有各自的方法。

以下記錄一個看到的題解比較清晰的實現

class Solution
{
public:
    int reverse(int x)
    {
        long result; //利用long避免溢位
        if (x == INT_MIN)
        {
            return 0;
        }
        if (x < 0)
        {
            return
-reverse(-x); } stringstream ss; ss << x; string tmpStr; ss >> tmpStr; int tmpStrSize = int(tmpStr.size()); string resultStr; for (int index = tmpStrSize - 1; index >= 0; index--) { resultStr.push_back(tmpStr[index]); } ss.clear();
//使用前記得clear ss << resultStr; ss >> result; if (result > INT_MAX) { return 0; } return int(result); } }; 作者:pinku-2 連結:https://leetcode-cn.com/problems/reverse-integer/solution/zheng-shu-fan-zhuan-cshi-xian-liang-chong-jie-fa-z/ 來源:力扣(LeetCode) 著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

另一種實現思路,不需要經過轉化。每次提取末尾數字放到開頭,同時檢查是否溢位。

class Solution {
public:
    int reverse(int x) {
        int rev = 0;
        while (x != 0) {
            int pop = x % 10;
            x /= 10;
            if (rev > INT_MAX/10 || (rev == INT_MAX / 10 && pop > 7)) return 0;
            if (rev < INT_MIN/10 || (rev == INT_MIN / 10 && pop < -8)) return 0;
            rev = rev * 10 + pop;
        }
        return rev;
    }
};