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

leetcode:7. 整数反转

时间:2019-06-29 21:59:43      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:sdn   简洁   log   detail   blog   solution   直接   tor   style   

题目描述:

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例:

输入: 123
输出: 321
输入: -123
输出: -321
输入: 120
输出: 21

注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231,  231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

 

思路分析:

这道题是easy,实际上思路是比较简单的,首先用一个数组逆向的存储整数各位,再遍历一次数组,重新构建一遍即可。但是由于这个整数溢出问题,我也磕磕绊绊提交了多次,主要还是自己基础不够扎实。这里需要注意的是如何对于整数溢出进行判断,参考了一个博客的相关内容:https://blog.csdn.net/xiaomingZeng/article/details/80526607

 

另外也有一些题解采用了更加简洁的方法,没有用我这种这么直接的方式去判断溢出,算是比较巧妙的。可以参考博客:https://www.cnblogs.com/wmx24/p/9149916.html

 

代码:

 1 class Solution {
 2 public:
 3     int reverse(int x) {
 4         if(x>INT_MAX || x<INT_MIN )
 5             return 0;
 6         vector<int> num;
 7         while(x!=0)
 8         {
 9             int tmp = x%10;
10             num.push_back(tmp);
11             x = x/10;
12         }
13         int res = 0;
14         int base = 1;
15         for(int i=num.size()-1; i>=0; i--)
16         {
17             
18             if(num[i] > INT_MAX/base || num[i] < INT_MIN/base)
19                 return 0;
20             if(num[i]<0)
21             {
22                 if(base*num[i] < INT_MIN - res)
23                     return 0;
24             }
25             else if(num[i]>0)
26             {
27                 if(base*num[i] > INT_MAX - res)
28                     return 0;
29             }
30             res += num[i]*base;
31             if(i>0)
32             {
33                 if(base >= INT_MAX/10)
34                     return 0;
35                 else
36                     base *= 10;
37             }
38         }
39         return res;
40     }
41 };

 

leetcode:7. 整数反转

标签:sdn   简洁   log   detail   blog   solution   直接   tor   style   

原文地址:https://www.cnblogs.com/LJ-LJ/p/11107817.html

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