07整数反转

leetcode07:[07整数翻转]

题目描述

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

Example

输入: 123
输出: 321

solution idea

按行排序

一次构建反转整数的一位数字。使用long不会 stack overflow。在判断翻转后是否是32位整数

class Solution {
public:
    bool overflow_zero_test(int x)
    {
        if (x > 2^31 || x  < -2^31-1 || x==0)
        return true;
        else
        return false;
    }
    int reverse(int x) {
        long x_reverse=0;
        while(x)
        {
            x_reverse=x_reverse*10+x%10;
            x/=10;
        }
        if(x_reverse > 2147483647 || x_reverse < -2147483648) return 0;
        return x_reverse;
    }
};

python 实现

首先,对于一个整数,我们需要判定它的符号。如果它是负数的话,就先忽略掉符号,最后加上就好,这样方便计算。紧接着,要判断该数是否能在32位的储存空间里放下。其次,要判断整数里的0. 在做反转时,我们需要去除掉x从右到左所有的零,直到一个非零的位数。这样能保证再反转过来时第一位是非零数,这样返回的整数才有意义。然后通过对称数位调换位置,逐渐向中间趋近的方式来调换数字的位置。最后再加上相应的符号以及跟内存容量比较即可得出正确的答案。

class Solution:
    def overflow_zero_test(self,x):
        if x > 2**31 or x  < -2**31-1 or x==0: # 如果超过储存空间则直接返回0.
            return True
        else:
            return False

    def reverse(self, x: int) -> int:
        if self.overflow_zero_test(x): return 0
        if x>=0:
            tag=1
            x_str=str(x).strip('0')
        else:
            tag=-1
            x_str=str(x)[1:].strip('0')
        x_reverse=tag*int(x_str[::-1])
        if self.overflow_zero_test(x_reverse): return 0
        return x_reverse

参考文献

  1. c++ prime 第5版
  2. c++ 标准库
  3. devdocs
发布了65 篇原创文章 · 获赞 1 · 访问量 3887

猜你喜欢

转载自blog.csdn.net/qq_41918762/article/details/104085379