首页 > 其他 > 详细

leetcode 7

时间:2016-09-01 11:04:33      阅读:126      评论:0      收藏:0      [点我收藏+]

技术分享

 此题实现比较简单,但是边界处理比较麻烦。题目要求是以32位考虑,所以可表达的数的范围是-2147483648~2147483648。

我们需要判断当前的数翻转之后是否在这个范围中,我的思路是首先对当前数的绝对值进行判断,如果它不是一个10位数就可以正常的执行;

反之,进入判断边界的部分。将边界的最大值的每一位分别存入数组中。逐位进行比较,若翻转后越界,则返回0;

但是这样还是无法通过,会在边界处出错,即输入为-2147483648和2147483648就会得出错误的结果,正确的情况应该返回0;

对于上述的情况没有想明白原因,所以就取巧加了个判断,没想到竟然通过了。而且运行时间竟然是最短的,真是吓死我了!!

有大神看出哪里有毛病请一定告诉我,要不然我就瞎嘚瑟了~~

技术分享

 

代码如下:

 1 class Solution {
 2 public:
 3     int reverse(int x) {
 4         int result = 0;
 5         if(x == 2147483648 || x == -2147483648)
 6             return 0;
 7         if(abs(x) < 1000000000)
 8         {
 9             while(x != 0)
10             {
11             result = result * 10 + x % 10;
12             x = x / 10;
13             }
14         }
15         else
16         {
17             int a[10] = {2,1,4,7,4,8,3,6,4,8};
18             int i = 0;
19             int flag = abs(x);
20             while(flag != 0)
21             {
22                 if((flag % 10) > a[i])
23                 {
24                      return 0;
25                 }  
26                 else if((flag % 10) < a[i])
27                 {
28                     while(x != 0)
29                     {
30                         result = result * 10 + x % 10;
31                         x = x / 10;
32                     }
33                     return result;
34                 }
35                 flag /= 10;
36                 i++;
37             }
38         }
39         return result;
40     }
41 };

 

leetcode 7

原文:http://www.cnblogs.com/shellfishsplace/p/5827987.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!