Leetcode 7. Reverse Integer

Reverse digits of an integer.

Example1: x = 123, return 321

Example2: x = -123, return -321

算法思想:用求余数的来求出个位数的值,坑爹的是这题有溢出的问题,没考虑到。

判断再添加一位是否溢出的方法:

先判断当前数值是否在以下范围内(如果在,则超出):

ans>INT_MAX/10||ans<INT_MIN/10

如果不在上述范围内,再判断当相等时

<span style="font-size:18px;">ans=INT_MAX/10||ans=INT_MIN/10</span>
,判断加上最后一位是否超出范围。

以下代码进行了第一次判断,没有进行 相等时的判断。因为利用了对称性,因为原串时没有超出范围的,所以原串的最高位,小于等于INT_MAX的最高位。若新串满足相等第二个条件,则表示原串的最后一位(即新串的第一位)满足INT_MAX的最高位相等。原串最后一位没有超出范围,新串最后一位(原串第一位)更不会超过范围。


代码如下:

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


你可能感兴趣的:(LeetCode,C++,reverse)