LeetCode 7: Reverse Integer
阿新 • • 發佈:2018-08-16
its 空間復雜度 時間 是否 min 最大數 light sed 輸出 , 231 ? 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
Description:
Given a 32-bit signed integer, reverse digits of an integer.
Example 1:
Input: 123 Output: 321
Example 2:
Input: -123 Output: -321
Example 3:
Input: 120 Output: 21
Note:
Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [?231
描述:
給定32位有符號整數,反轉該整數的數字。
例子1:
輸入:123 輸出:321
例子2:
輸入:-123 輸出:-321
例子3:
輸入: 120 輸出:21
註意:假設32比特數據可以保存的數字的範圍為[-232, 232-1],當數字溢出時,返回0。
方法:
該方法的技巧之處在於如何檢測數字溢出。
采用數學的方法實現數字的反轉。
簡述如下:
pop = x % 10 x = x / 10 temp = temp * 10 + pop
假設數字x為正值,判斷轉換後的數字是否溢出的條件如下:
1. 如果temp = temp * 10 + pop造成溢出,那麽運算前temp的值temp >= INT_MAX/10 2. 如果temp > INT_MAX/10,那麽temp = temp * 10 + pop一定溢出 3. 如果temp == INT_MAX/10,並且pop > 7,那麽temp = temp * 10 + pop溢出。
這裏,對於條件3,pop > 7的是因為32位整形表示的最大數字為2147483647。
相應地,對於負數,也做類似處理。
class Solution { public: int reverse(int x) { int ret = 0; while(x) { int pop = x % 10; x = x / 10; if(ret > INT_MAX / 10 || (ret == INT_MAX / 10 && pop > 7)) return 0; if(ret < INT_MIN / 10 || (ret == INT_MIN / 10 && pop < -8)) return 0; ret = ret * 10 + pop; } return ret; } };
時間復雜度為O(lg(x)),空間復雜度為O(1)。
LeetCode 7: Reverse Integer