Reverse Integer 2015年6月23日
题目:
Reverse digits of an integer. Example1: x = , return
Example2: x = -, return -
思路:递归
解答:
/ test cases passed.
Status: Accepted
Runtime: ms
Submitted: minutes ago
这个方法比较糟糕,时间太长用到递归但又没利用函数的返回值,中间还需要借助字符串过渡。
public class Solution {
StringBuilder result = new StringBuilder("");
public int reverse(int x) {
//Integer.MIN_VALUE 会引起各种麻烦
if(x == Integer.MIN_VALUE){
return 0;
}
if(x >= 0){
if ( x == 0)
return 0;
else
{
result.append(x%10);
reverse(x/10);
} }else{
if ( x == 0)
return 0;
else
{
result.append(Math.abs(x)%10);
reverse(x/10);
}
} if( Long.parseLong(result.toString())-Integer.MAX_VALUE>0){
return 0;
}else{
if(x<0){
return 0-Integer.parseInt(result.toString());
}else{
return Integer.parseInt(result.toString());
}
} }
}
看到一个8ms的C++程序
/ test cases passed.
Status: Accepted
Runtime: ms
Submitted: minutes ago
class Solution {
public:
int reverse(int x) {
long result = ;
while(x != )
{
result = result* + x % ;
x /= ;
}
return (result > INT_MAX || result < INT_MIN)? : result;
}
};
改成JAVA版
public class Solution {
public int reverse(int x) {
long result = 0;
while(x != 0)
{
result = result*10 + x % 10;
x /= 10;
}
return (int) ((result > Integer.MAX_VALUE || result < Integer.MIN_VALUE)? 0 : result);
} }
效果:
/ test cases passed.
Status: Accepted
Runtime: ms
Submitted: minutes ago
分析:
Reverse Integer :
以整形数字12345为例: 第1次循环:
x=
result = 第2次循环:
x=
result = *+ = 第3次循环:
x=
result = (*+)*+ = 第4次循环:
x=
result = ((*+)*+)* + = 第5次循环:
x=
result = (((*+)*+)* + )* + =
该算法无需区分正符号,显然转化成字符串是一种比较low的想法
可以看到几乎同样的代码,java运行时间要长很多,知乎上给出的解释是java统计时间时把虚拟机的启动时间也考虑在内,所以不同语言之间通过时间来衡量算法优劣是不可取的,用java语言也没必要纠结于此
另外,本可不用字符串的一定要杜绝字符串的使用,因为其它语言的字符串并不像java这么方便,要考虑代码的通用性
另外还发现java语言的代码重复运行,时间波动也比较大,这个波动有时都接近100ms!!!
Reverse Integer 2015年6月23日的更多相关文章
- 路冉的JavaScript学习笔记-2015年1月23日
1.JavaScript的数据类型 A.原始类型:包含数值.字符串.布尔值.空值(null)和未定义值(undefined). Js原始类型均为不可改变类型.对不可变类型调用任何自带方法都不会改变原始 ...
- Palindrome Number 2015年6月23日
题目: 判断一个数是不是回文数 Determine whether an integer is a palindrome. Do this without extra space. 思路:借助上一道求 ...
- 初识Less(2015年05月23日)
因为最近在研究Bootstrap,然后才了解到Less,听说Less很强大,又听说Bootstrap+Less会更搭,所以就决定也顺带了解下Less的相关知识. come on...... 一.简介 ...
- 2015年10月23日JS笔记
ECMAScript标准:JavaScript核心语法 微软:Jscript ECMAScript标准:一纸空文 JavaScript和JScritp都号称完全实现了 ECMAScript标准 W3C ...
- github使用指南(2015年3月23日更新了本地创建仓库再推送到remote仓库的使用方法)
我是通过这个来学习的.个人愚笨,琢磨了半天,终于搞通了,醉了醉了,以前一直使用svn,用git确实有点水土不服.本文以如何使用git为主来展开,不涉及太多理论. git是分布式的版本管理.什么叫分布式 ...
- 北京Uber优步司机奖励政策(11月23日~11月29日)
用户组:人民优步"关羽组"(适用于11月23日-11月29日)奖励政策: 滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最 ...
- 2015年12月28日 Java基础系列(六)流
2015年12月28日 Java基础系列(六)流2015年12月28日 Java基础系列(六)流2015年12月28日 Java基础系列(六)流
- 2015年12月13日 spring初级知识讲解(四)面向切面的Spring
2015年12月13日 具体内容待补充...
- 2016年12月23日 星期五 --出埃及记 Exodus 21:18
2016年12月23日 星期五 --出埃及记 Exodus 21:18 "If men quarrel and one hits the other with a stone or with ...
随机推荐
- php调试之路
解析php中die(),exit(),return的区别 die()停止程序运行,输出内容exit是停止程序运行,不输出内容return是返回值die是遇到错误才停止exit是直接停止,并且不运行后续 ...
- MyBetis3.2框架技术
1.1 MyBatis介绍 MyBatis 世界上流行最广泛的基于SQ语句的ORM框架,由Clinton Begin 在2002 年创建,其后,捐献给了Apache基金会,成立了iBatis 项 ...
- 常见的Java面试题整理
面试是我们每个人都要经历的事情,大部分人且不止一次,这里给大家总结常见的面试题,让大家在找工作时候能够事半功倍. 1 Switch能否用string做参数? a.在 Java 7 之前, switch ...
- Linux查看网络端口
简单的总结一下前段时间学习Linux的成果 查看 TCP 22 端口是否打开1.列出所有端口:[root@Demon proc]# netstat -ntlpActive Internet conne ...
- 看看我做的一款 时间轴 插件 timegliderJs
TimegliderJs 是一款基于jQuery的时间轴插件.完成后效果. 介绍 Timeglider JS是一个由javascript支持缩放,数据驱动的时间轴组件.非常适合显示项目历史,项目计划及 ...
- docker.service启动失败:Unit not found
docker.service启动失败:Unit not found 版权声明:本文为博主原创文章,未经博主允许不得转载. 背景 因为最近一直在折腾Kubernetes集群版本升级.Docker版本升级 ...
- Python自学笔记——matplotlib极坐标.md
一.极坐标 在平面内取一个定点O,叫极点,引一条射线Ox,叫做极轴,再选定一个长度单位和角度的正方向(通常取逆时针方向).对于平面内任何一点M,用ρ表示线段OM的长度(有时也用r表示),θ表示从Ox到 ...
- iOS获取设备型号和App版本号等信息(OC+Swift)
iOS获取设备型号和App版本号等信息(OC+Swift) 字数1687 阅读382 评论3 喜欢10 好久没有写过博客了,因为中间工作比较忙,然后有些个人事情所以耽误了.但是之前写的博客还一直有人来 ...
- MVC实现SSO
近来工作无事,想做个SSO, 之前做过一个项目用到SSO,自己也没有看明白是个什么东西.现在正好有时间,所以想研究下. 先是从网上看到了SSO的思路: 三个站点:SiteA,SiteB,SiteMai ...
- SourceTree 无法查看组织仓库
error log: Pushing to remote: Repository not found. 在使用SourceTree进行版本控制,代替git命令行,而且作为免费 跨平台 功能完备的git ...