LeetCode 7 有几个坑踩得还是很有价值的
来源:互联网 发布:域名交易新闻 编辑:程序博客网 时间:2024/05/01 09:44
很简单的一道题
第一次提交的代码是这样的
public class Solution { public int reverse(int x) { boolean flag = false; if (x < 0) { x = Math.abs(x); flag = true; } StringBuilder sb = new StringBuilder(String.valueOf(x)); sb.reverse(); if (flag) { sb.insert(0, '-'); } return Integer.valueOf(sb.toString()); }}
原先的思路是先判断这个数是不是负数,如果是的话,标记一下然后用Math类的方法把它变为正数。,然后用StringBuilder类的方法将它翻转,之后如果之前标记是负数的话就在最前面加上‘-’号,然后用Integer类提供的方法将它转为int类型返回。
踩的第一个坑是:
使用Integer类转换的数字超出了范围,所以改为用Long类型来转换,然后return的时候强制类型转换为int类型,第二次的代码:
public class Solution { public int reverse(int x) { boolean flag = false; if (x < 0) { x = Math.abs(x); flag = true; } StringBuilder sb = new StringBuilder(String.valueOf(x)); sb.reverse(); if (flag) { sb.insert(0, '-'); } long result = Long.valueOf(sb.toString()); return (int) result; }}踩了第二个坑:
Math.abs()方法没有起作用,一查文档,Note that if the argument is equal to the value of Integer.MIN_VALUE, the most negative representable int value, the result is that same value, which is negative. 而题目中的测例-2147483648刚好就是Integer.MIN_VALUE,不得不说测例覆盖的还挺全面。只好又改了一下,不用Math.abs()方法了,直接用StringBuilder的方法来处理。其实题目中还有一个隐含的条件没有提到,如果翻转之后的数超出了int类型的范围,则返回0。因此,最终的代码是这样的:
public class Solution { public int reverse(int x) { boolean flag = false; StringBuilder sb = new StringBuilder(String.valueOf(x)); if (x < 0) { sb.deleteCharAt(0); flag = true; } sb.reverse(); if (flag) { sb.insert(0, '-'); } long result = Long.valueOf(sb.toString()); if (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE) { return 0; } return (int) result; }}虽然效率不高,还是AC了。
后来又试了另外一种写法,效率反而降低了,不过还是把代码贴上来
public class Solution { public int reverse(int x) { boolean flag = false; StringBuilder sb = new StringBuilder(String.valueOf(x)); if (x < 0) { sb.deleteCharAt(0); flag = true; } sb.reverse(); if (flag) { sb.insert(0, '-'); } int result; try { result = Integer.valueOf(sb.toString()); } catch (Exception e) { return 0; } return result; }}即如果在用Integer转换的时候抛出了异常,那么说明这个数超出了int型的范围,直接返回0即可。
0 0
- LeetCode 7 有几个坑踩得还是很有价值的
- Iterator中的有价值的几个函数
- VSS2005的快捷键——有几个还是很有用的
- 在世界史上死得最有价值的中国人 (ZT)
- 在世界史上死得最有价值的中国人
- 何为有价值的程序员,写得不错
- Apple 的音乐推荐做得还是蛮有特色的
- 很有价值意义的事例
- 一个很有价值的研究成果
- 关于 Openlayers,geoserver,uDig,网上有一组很有价值的文章
- 有哪些网站用爬虫爬取能得到很有价值的数据?
- 今天给同学写5个数据结构算法的题...感觉很有价值的几个题..感兴趣的坐下。。
- antlr究竟有没有一个有价值的例子?
- 搜索引擎还是很有发展前途的
- c#采集网页用得几个函数 有解释
- 友情链接之前一定得有几个前提
- 还是得注意DOCTYPE的声明
- [转贴]是什么让一件有价值的事变得如此难堪?
- Fragment相关的笔记整理
- objective-c之类与对象
- 2016 年移动应用开发趋势总结
- Sharding-JDBC
- Hadoop使用学习笔记(4)
- LeetCode 7 有几个坑踩得还是很有价值的
- 权限系统与RBAC模型概述
- 常用 Git 命令清单
- Android 属性动画详解,属性动画基本用法!
- 一个因为SQL join引发的内存泄露
- Android layout布局属性、标签属性总结大全
- 24节气算法
- SSM框架搭建
- 【CDOJ】柱爷与咸鱼神功