7. Reverse Integer

题目描述

给定一个 32 位有符号整数,将整数中的数字进行反转。

示例 1:

输入: 123
输出: 321

示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

注意:

假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。

我的解法——两遍循环(AC)

  • 第一遍循环数组记录总位数,第二遍生成新数
  • 注意一些地方要int取整
  • 时间空间复杂度均为O(n)。
  • Beat14%
class Solution(object):
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        flag = False
        if(x < 0):
            flag = True
            x = -x
        elif(x == 0):
            return 0
        xt = x
        all = 0
        while(x > 0):
            x = int(x / 10)
            all += 1
        
        res = 0
        x = xt
        for i in range(all - 1,-1,-1):
            res += (xt % 10) * pow(10,i)
            xt = int(xt / 10)
        if(flag):
            res = -int(res)
        else:
            res = int(res)
        
        if(res > pow(2,31) - 1 or res < -pow(2,31)):
            return 0
        else:
            return res

最优解法——一遍循环

int reverse(int x) {
    int y=0;
    int n;
    while( x != 0){
        n = x%10;
        if (y > INT_MAX/10 || y < INT_MIN/10){
             return 0;
        }
        y = y*10 + n; //这里就避免了循环两遍,还要确定位数,6666666
        x /= 10;
    }
    return y;
}