码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode题解 #7 Reverse Integer

时间:2015-11-30 23:42:22      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:

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

 

题目大意:给定一个整型(即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; }这行代码算是模板了。记住就好

LeetCode题解 #7 Reverse Integer

标签:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!