上一次做完一个中等题觉得还挺简单,做一下简单题看看。
题目大意:给定一个整型(即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; }这行代码算是模板了。记住就好
时间: 2024-11-06 10:37:18