[LeetCode][7]Reverse Integer解析与位运算实现 -Java实现
2016-06-06 15:57
381 查看
Q:
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
A:
以下解法和代码没有借阅以往任何资料,如果有更好的解法请在评论区留言
这题我们很久之前就做过了,相当年我还只会C++的时候老师就布置这种题目给做了,当时的解法应该是先判断正负然后从第一位开始做取余和除的运算然后输出大概时间复杂度是O(n)。今天我们来研究一下有没有什么奇葩的解法,不然这题就没啥意思了。
经过我的反复思考好像也没什么好弄的,想了想以前看的jdk源码里关于Integer.toString()的部分内容好像也涉及到了int分割成每个小单位然后换成char的操作,里面都用的位运算,或许能快点。代码如下:
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
A:
以下解法和代码没有借阅以往任何资料,如果有更好的解法请在评论区留言
这题我们很久之前就做过了,相当年我还只会C++的时候老师就布置这种题目给做了,当时的解法应该是先判断正负然后从第一位开始做取余和除的运算然后输出大概时间复杂度是O(n)。今天我们来研究一下有没有什么奇葩的解法,不然这题就没啥意思了。
经过我的反复思考好像也没什么好弄的,想了想以前看的jdk源码里关于Integer.toString()的部分内容好像也涉及到了int分割成每个小单位然后换成char的操作,里面都用的位运算,或许能快点。代码如下:
public class ReverseInteger { public static void main(String[] args){ System.out.println(method(-1234)); } private static int method(int i) { // TODO Auto-generated method stub boolean isNegative = false; if (i < 0) { isNegative = true; i = -i; } int r =0; int q = 1; int result = 0; while (true) { q = (i * 52429) >>> 19;//去尾1位,2<<(16+3)=524288 52429/524288约为0.1 r = i - ((q << 3) + (q << 1));//r=i-q*10,截出最后一位 result = (result<<3)+(result<<1)+r; i=q; if(q==0)break; } if(isNegative) result = -result; return result; } }在计算中使用位运算应该会快很多,很佩服google的工程师。。我写这么一点位运算就写了十几分钟。。。。。
相关文章推荐
- java的分层开发
- How Do Annotations Work in Java?--转
- JAVA 递归 汉诺塔+阶乘
- java泛型(一)、泛型的基本介绍和使用
- 深入理解Java内存模型——volatile
- 小议java中常用的定时任务
- SSH框架网上商城项目第25战之使用java email给用户发送邮件
- java使用PDFBox2.0将PDF生成图片
- java笔记
- Java解析XML格式串(JDOM解析)
- Java编程练习目录
- Java 学习之 多态性的理解
- JAVA设计模式之---工厂模式
- Ehcache 整合Spring 使用页面、对象缓存
- Java多线程初探——死锁
- java开发webservice简单实例
- [java]序列化框架性能对比(kryo、hessian、java、protostuff)
- SSH框架网上商城项目第24战之Struts2中处理多个Model请求的方法
- Java并发:volatile内存可见性和指令重排
- Java在已经存在的项目上创建WebService步骤