这道题是LeetCode里的第7道题。

题目描述:

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

示例 1:

输入: 123
输出: 321

 示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

注意:

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

首先,这是一道简单题,根据我多年的做题经验来看,这道题肯定有坑,绝对会有 INT_MAX_VALUE 和 INT_MIN_VALUE 的样例。所以我们肯定需要判断溢出。具体的过程在代码中,

  • INT_MAX_VALUE = 2^31-1 = 2147483647
  • INT_MIN_VALUE = -2^31 = -2147483648

提交代码:

class Solution {
public int reverse(int x) {
int res=0;
//boolean flag=x<0?false:true;
if(x>0){
while(true){
res+=x%10;
x/=10;
if(x==0)return res;
if(res>214748364||res==214748364&&x%10>7)return 0;
res*=10;
}
}else{
while(true){
res+=x%10;
x/=10;
if(x==0)return res;
if(res<-214748364||res==-214748364&&x%10<-8)return 0;
res*=10;
}
}
}
}

才发现可以简化代码:

class Solution {
public int reverse(int x) {
int res=0;
//boolean flag=x<0?false:true;
while(true){
res+=x%10;
x/=10;
if(x==0)return res;
if(res>214748364||res==214748364&&x%10>7)return 0;
if(res<-214748364||res==-214748364&&x%10<-8)return 0;
res*=10;
}
}
}

提交结果:

个人总结:

虽然没有踩进本题的坑里,但是我被这道题秀了一波数学,负数的余数是负数。

StringBuffer 法:

class Solution {
public int reverse(int x) {
StringBuffer sb = new StringBuffer();
String str = sb.append(String.valueOf(x < 0 ? x * -1 : x)).reverse().toString();
try{
return x < 0 ? Integer.parseInt(str) * -1 : Integer.parseInt(str);
}catch(Exception e){
return 0;
}
}
}

运行时间:

其他代码:

class Solution {
public int reverse(int x) {
String s=String.valueOf(Math.abs(x));
StringBuilder sb=new StringBuilder();
for (int i=s.length()-1;i>=0;--i){
sb.append(s.charAt(i));
}
try{
return x>0?Integer.valueOf(sb.toString()):-Integer.valueOf(sb.toString());
}catch (Exception e){
return 0;
}
}
} class Solution {
public int reverse(int x) {
char[] s = Integer.toString(x).toCharArray();
int f = 0,b = s.length-1;
String string = "";
if (s[f] == '-') {
string += '-';
++f;
}
while (b >= 0&& s[b] == '0') {
--b;
}
while (f <= b) {
string += s[b--];
}
if (string != "") {
long num = Long.valueOf(string);
if (num < (1<<31)-1 && num > -(1<<31)) {
return (int)num;
}
}
return 0;
}
}

关于溢出的问题,最方便的解决方法是当溢出时直接抛出异常,然后在异常处理语句中返回 0,当然这个方法对 JDK 的版本有要求。具体读者可以自行搜索。

最新文章

  1. PhoneGap(二维码扫描 )
  2. Anliven - 乱炖
  3. ComponentOne Xuni助力Xamarin开发者突破百万,快速开发Android、IOS Apps
  4. css form 表单组对齐
  5. [HTML/CSS]display:none和visibility:hidden的区别
  6. UVA 1599 Ideal Path (HDU 3760)
  7. C++编程有趣的标题1 于1~9填写的运算结果的中间符号等于100
  8. javascript对象和数组之 深拷贝和浅拷贝
  9. tp5.0 SHOW COLUMNS FROM 生成数据表字段缓存
  10. Java并发编程(十三)-- 线程池
  11. OpenCV 的颜色空间转换
  12. js 格式为2018-08-25 11:46:29 的日期比较方法
  13. Mysql 插入中文错误:Incorrect string value: &#39;\xE7\xA8\x8B\xE5\xBA\x8F...&#39; for column &#39;course&#39; at row 1
  14. Java编程的逻辑 (55) - 容器类总结
  15. thinkphp5高亮当前页(仅针对个人项目记录,不做通用参考)
  16. 前端解放生产力之–动画(Adobe Effects + bodymovin + lottie)
  17. Linux系统之路——用CentOS 7打造合适的科研环境
  18. django框架&lt;三&gt;
  19. WinForm中的重绘 - 按钮等控件的背景渐变色重绘
  20. java 程序设计第一次作业

热门文章

  1. MySQL表的碎片整理和空间回收小结
  2. vuex的state,mutation,getter,action
  3. 【LeetCode】4.Median of Two Sorted Arrays 两个有序数组中位数
  4. MFC【exe】工程中的文件大致信息(翻译的)
  5. mac安装webpack失败
  6. 2018.5.8 XML编程
  7. python_92_面向对象初体验
  8. idea前后端分离搭建 JavaWeb项目
  9. JavaScript -- 内置对象字符串
  10. RuntimeError: cryptography is required for sha256_password or caching_sha2_p