题目:

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日的更多相关文章

  1. 路冉的JavaScript学习笔记-2015年1月23日

    1.JavaScript的数据类型 A.原始类型:包含数值.字符串.布尔值.空值(null)和未定义值(undefined). Js原始类型均为不可改变类型.对不可变类型调用任何自带方法都不会改变原始 ...

  2. Palindrome Number 2015年6月23日

    题目: 判断一个数是不是回文数 Determine whether an integer is a palindrome. Do this without extra space. 思路:借助上一道求 ...

  3. 初识Less(2015年05月23日)

    因为最近在研究Bootstrap,然后才了解到Less,听说Less很强大,又听说Bootstrap+Less会更搭,所以就决定也顺带了解下Less的相关知识. come  on...... 一.简介 ...

  4. 2015年10月23日JS笔记

    ECMAScript标准:JavaScript核心语法 微软:Jscript ECMAScript标准:一纸空文 JavaScript和JScritp都号称完全实现了 ECMAScript标准 W3C ...

  5. github使用指南(2015年3月23日更新了本地创建仓库再推送到remote仓库的使用方法)

    我是通过这个来学习的.个人愚笨,琢磨了半天,终于搞通了,醉了醉了,以前一直使用svn,用git确实有点水土不服.本文以如何使用git为主来展开,不涉及太多理论. git是分布式的版本管理.什么叫分布式 ...

  6. 北京Uber优步司机奖励政策(11月23日~11月29日)

    用户组:人民优步"关羽组"(适用于11月23日-11月29日)奖励政策: 滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最 ...

  7. 2015年12月28日 Java基础系列(六)流

    2015年12月28日 Java基础系列(六)流2015年12月28日 Java基础系列(六)流2015年12月28日 Java基础系列(六)流

  8. 2015年12月13日 spring初级知识讲解(四)面向切面的Spring

    2015年12月13日 具体内容待补充...

  9. 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 ...

随机推荐

  1. 老李谈JVM内存模型

    老李谈JVM内存模型   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821478,咨 ...

  2. Maven项目搭建(三):Maven直接部署项目

    上一章给大家讲解了如何使用Maven搭建SSM框架项目.   这次给大家介绍一下怎么使用Maven直接部署项目.   Maven直接部署项目  1.新建系统变量CATALINA_HOME,值为:Tom ...

  3. selenium自动化过程中如何操作Flash动画

    最近在看python的爬虫框架(scrapy),一个词概括就是:"酸爽"!等把selenium自动化版块讲完后,打算写一写关于scrapy相关的知识,打算从源码角度解析下scrap ...

  4. MongoDB--在windows下的安装过程及基本配置

    这几天在做一个简单的后台博客系统,数据库用到了 MongoDB ,虽说官方的文档比较全,但是对于我一个英语一般的人来说,或多或少在配置的时候出现了一些问题,总结了一下在安装及创建服务的过程 Mongo ...

  5. 跟着刚哥梳理java知识点——HelloWorld和常见问题(一)

    1.按照国际惯例,写一段输出HelloWorld的java语句: public class HelloWorld { //这是main方法,程序的主入口 public static void main ...

  6. Rookey.Frame v1.0极速开发平台稳定版发布

    Rookey.Frame v1.0经过一年时间的修改及沉淀,稳定版终于问世了,此版本经过上线系统验证,各个功能点都经过终端用户验证并持续优化,主要优化以下几个方面: 1.性能较原来提升3倍之多 2.修 ...

  7. TaintDroid简介

    1.Information-Flow tracking,Realtime Privacy Monitoring.信息流动追踪,实时动态监控. 2.TaintDroid是一个全系统动态污点跟踪和分析系统 ...

  8. aProxy: 带认证授权和权限控制的反向代理

    前段时间很多数据库因为没有做好权限控制暴露在外网被删然后遭勒索的事件,而类似的有些内网的web服务也会被开放到公网并且没有做任何权限控制的,这样也会有一定的风险.所以就决定写篇文章简单介绍一个小工具. ...

  9. 【Java基础】Java类的加载和对象创建流程的详细分析

    相信我们在面试Java的时候总会有一些公司要做笔试题目的,而Java类的加载和对象创建流程的知识点也是常见的题目之一.接下来通过实例详细的分析一下. 实例问题 实例代码 Parent类 package ...

  10. Web性能优化工具WebPageTest(三)——本地部署(Windows 7版本)

    这次先能够使用PC端的浏览器测试,首先需要下载官方的发布版本"WebPageTest 3.0". 1. agent:浏览器代理软件 2. mobile:移动端参数相关代码 3. w ...