LeetCode题解 #7 Reverse Integer

上一次做完一个中等题觉得还挺简单,做一下简单题看看。

题目大意:给定一个整型(即int),将它的数位反过来,如321变为123,-321变为-123.

做了很久,因为简单题耗时的地方在于恶心!!

最后才看见溢出的时候应该返回0!!

一点都不难,特别是对于java。

我的思路:

1、将读入的int型包装成Integer,然后在转换成String。(看看前面有没有+-号)

2、将String 倒置,再转换为long。(一定要是long,否则无法判断溢出)

3、如果没溢出,再将long转换为int。

以上都用了java自带的类,是很简单,但是效率低下。大概是在中上的水平。(无法理解比这个方法更低效率的代码是怎么写的-_-|||)

以下是我改进一下的正确做法:

class Solution {

public: int reverse(int x) {

// 先分离出x的数值部分和符号部分

int y = abs(x), z = x == y ? 1 : -1;

// 将y反向放于一个long中,这样可以避免越界

long tmp = 0; while (y) { tmp = tmp * 10 + y % 10; y /= 10; }

// 判断是否越界

if (z*tmp > INT_MAX || z*tmp < INT_MIN) return 0;

// 否则返回翻转后的值

return z*tmp;

}

};

总结一下:

 1、碰到要判断int是否溢出的地方,肯定要用到long的,用long比较是否溢出。

 2、要从另一个数字一个个的构造另一个数字,long tmp = 0; while (y) { tmp = tmp * 10 + y % 10; y /= 10; }这行代码算是模板了。记住就好

原文地址:https://www.cnblogs.com/wzben/p/5008569.html