leetcode Reverse Integer java基本编程学习笔记(一)
2015-08-25 09:42
609 查看
时隔一个月,再次拾起leetcode开始刷题。
我这种人吧,总是做一段时间,某天因为某个原因给搁置了,然后就没有然后了,等在想起来总能给自己那段时间寻找"合理"的借口,这种人是不是要一辈子成为loser呢?题目:
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
注意: 一些边界条件的考虑可以在笔试或面试时为你的代码带来加分的效果
1. int x =0的情况,单独处理。
1.考虑翻转后的溢出问题; 一般溢出情况需要出题人声明 异常处理。
2. 如果最后都是0,该怎么处理? 例如 10,100等? 所以while判断的终止条件应该是x!=0 而不是余数怎么着怎么着。
http://blog.csdn.net/linhuanmars/article/details/20024837 (java 此博文中 任何越界返回值都为0)
1> public class Solution { public int reverse(int x) { if(x==0) return x; int t; long y = 0; int max = Integer.MAX_VALUE; int min = Integer.MIN_VALUE; while(x!=0){ t = x % 10; // [这两行改写成: y =y*10 + x % 10 ; ] y = y*10 +t; if(y > max || y < min){ y = 0; return (int)y; } x = x/10; } return (int)y; } }
2> <a target=_blank href="http://blog.csdn.net/linhuanmars/article/details/20024837">http://blog.csdn.net/linhuanmars/article/details/20024837</a> (java 此博文中 任何越界返回值都为0)
public int reverse(int x) { if(x==Integer.MIN_VALUE) //作者代码的巧妙之处。 return 0; int num = Math.abs(x); int res = 0; while(num!=0) { if(res>(Integer.MAX_VALUE-num%10)/10) //作者代码额巧妙之处。 return 0; res = res*10+num%10; num /= 10; } return x>0?res:-res; }
3> //reverse新思路,但是没有考虑溢出问题。 public static int reverse(int num){ char[] numArray = null; String numStr=""; if (num == 0) { return 0; } else if (num > 0) { numArray = (num + "").toCharArray(); System.out.println(numArray); } else { numStr+="-"; numArray = (num + "").substring(1).toCharArray(); System.out.println(numArray); } for(int i =numArray.length-1;i>=0;i--){ numStr+=numArray[i]; } // return Integer.valueOf(numStr).intValue(); //String类型和int类型的转换 第一种方法 return Integer.parseInt(numStr); //String类型和int类型的转换 第二种方法 }
4> 参考别的人的C++代码: <a target=_blank href="http://blog.csdn.net/zhouworld16/article/details/16067825">http://blog.csdn.net/zhouworld16/article/details/16067825</a> class Solution { public: int reverse(int x) { // IMPORTANT: Please reset any member data you declared, as // the same Solution instance will be reused for each test case. const int max = 0x7fffffff; //int最大值 const int min = 0x80000000; //int最小值 long long sum = 0; while(x != 0) { int temp = x % 10; sum = sum * 10 + temp; if (sum > max || sum < min) //溢出处理 { sum = sum > 0 ? max : min; return sum; } x = x / 10; } return sum; } };
java基础学习。
相关文章推荐
- 各种排序算法的分析及java实现
- Java中用浮点型数据Float和Double进行精确计算时的精度问题
- Android-eclipse-NDK&JNI
- eclipse工程手动迁移android-studio
- 数据库SQL Server2012笔记(七)——java 程序操作sql server
- 安装JDK及环境变量设置
- Java生成六位验证码(发短信验证)
- java 编码
- Java多线程-卖票
- 《深入浅出 Java Concurrency》—并发容器 ConcurrentMap
- 每日五题(java基础)
- [Java]哲学家就餐问题
- RMI java.rmi.ConnectException: Connection refused to host: 192.168.1.108
- java web项目防止多用户重复登录解决方案
- Java 无名方法,static方法
- 安装JDK后bin文件下没有tools.jar解决
- 马士兵Java视频第三章总结
- eclipse工具使用技巧&关联Android源码
- eclipse导入一个项目之后没有JRE System Library怎么办?
- SSi框架整合