java 如何将数字倒置_每日一个小算法之整数中每位上的数字进行反转 20190810

题目要求:

给出一个32位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例 1:

输入: 123输出: 321

示例 2:

输入: -123输出: -321

示例 3:

输入: 120输出: 21

示例 4:

输入:9646324351输出: 0

注意:

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [2的31次方, 2的31次方 1]。

请根据这个假设,如果反转后整数溢出那么就返回 0。

解决方案1:

最low的方法

思路:

转换成字符串。获取最后第一位和最后一位。用于判断是否是负数和是否是0

然后在进行判断,根据情况不同进行判断处理。

如下代码:

public int reverse(int x) {String strX = Integer.valueOf(x).toString(); char [] charArr = strX.toCharArray(); int length = charArr.length; String [] strArr = new String [length]; for(int i =0;i0;i--){ index++; String str = strArr[i]; newStrArr[index] = str; } }else if("0".equals(lastStr)){ newStrArr = new String [length-1]; for(int i= length-2; i >=0;i--){ String str = strArr[i]; newStrArr[index] = str; index++; } }else if("-".equals(fasterStr)){ newStrArr[0] = fasterStr; for(int i= length-1; i >0;i--){ index++; String str = strArr[i]; newStrArr[index] = str; } }else{ for(int i= length-1; i >=0;i--){ String str = strArr[i]; newStrArr[index] = str; index++; } } String str = ""; for(int i = 0;i

此方案运行结果:

3e46c8be0777d0c863d09ae520e2afeb.png

运行9毫秒,消耗内存35.4M

解决方案二:

从数学思维来处理的。

例如:1234 反过来就是4321

也就是个位和千百位互换、十位和百位互换。

这些明白了吧。也就是10的x方+Y%10.

其中x是位数。Y是数据。

看懂上面的,我们就能得到下面代码:

public int reverse2(int x) {//用数学思维来看 int rpc = 0; while (x != 0) { int newrpc = rpc*10 + x%10; log.info("rpc*10:{},x%10:{},newrpc:{}",(rpc*10),x%10,newrpc); if ((newrpc - x%10)/10 != rpc){ return 0; } rpc = newrpc; x = x/10; } log.info("==:{}",rpc); return rpc;}

运行后打印日志:

1ad8947dbd8a583d8b195eaf83af6ae3.png

我们在来看看此方案执行结果:

1461f9d3086d48e08064adb4f147a5f7.png

耗时3毫秒,内存消耗:34.3M

再来看第三种解决方案:

思路:使用字符串的反转方法。当溢出的时候异常直接返回0

public int reverse3(int x) {try { if(x > 0) { StringBuilder str = new StringBuilder().append(x); return Integer.parseInt(str.reverse().toString()); }else { StringBuilder str = new StringBuilder().append(-x); return Integer.parseInt(str.reverse().toString())*(-1); } }catch (NumberFormatException e) { return 0; }}

此方案运行结果:

b81c438edef8b94f51249dbb6d0f625b.png

方案4:

使用了math函数、位运算及字符串反转的

public int reverse4(int x){//区域 右端点 double start = Math.pow(2, 31) - 1; //区域 左端点 double end = -Math.pow(2, 31); if(xstart){ return 0; } //获取原始数字符号 float df = Math.signum(x); Integer intDf = Math.round(df); // 取绝对值 int i = Math.abs(x); //使用sring的反转方式 StringBuilder str = new StringBuilder().append(i).reverse(); x = Integer.parseInt(str.toString()); log.info("==>:{}",x*intDf); return x*intDf ;}

执行结果:

c2208c70a32cf2db4cce9ffb388f942c.png

方案五:

使用的是位移运输和math函数。

public int reverse5(int x) {int res = 0; int of = ((1 << 31) - 1) / 10; while (x != 0) { if (Math.abs(res) > ((1 << 31) - 1) / 10){ return 0; } res = res * 10 + x % 10; x /= 10; } return res;}

执行结果:

8e926ffed0919008adff42d0292220de.png

我们将5种方案进行对比:

0ff4c019dc04fc804836c14595920779.png

发现第二种和第五种方案耗时最短。也就是使用数学思路和位移运行最快。

经过五中方案比较之后,我们是不是体会到:编程是一门艺术了。

本文出处:凯哥Java(kaigejava)

好了,今天小算法就到这里了。《每天一个小算法》希望直接可以坚持下去。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500217.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java se 开发web程序_JDiy快速开发WEB之javaSE环境搭建-初级

大学的时候对web开发很感兴趣&#xff0c;对网页中的动画&#xff0c;对用户注册&#xff0c;对网页中表格填写等等都倍感兴趣。加之又有专业课程编程语言java&#xff0c;因此&#xff0c;对java web产生了浓厚的兴趣&#xff0c;再加之有北京圣思园 风中叶 大师的视频教程&am…

java apktoo_apktool.jar

apktool.jar是APKTOOL这个反编译工具必须用到的必备jar包&#xff0c;给大家提供最新的apktool.jar2.3.4&#xff0c;有需要的赶快下载吧&#xff01;。相关软件软件大小版本说明下载地址apktool.jar是APKTOOL这个反编译工具必须用到的必备jar包&#xff0c;给大家提供最新的ap…

Java 内存 关系_JVM和Linux之间的详细内存关系

JVM和Linux之间的详细内存关系在一些具有8g物理内存的服务器上&#xff0c;主要运行Java服务。系统内存分配如下&#xff1a;Java服务的JVM堆大小设置为6g&#xff0c;监视过程大约需要600m&#xff0c;Linux本身使用大约800m。从表面上看&#xff0c;物理记忆应该足够&#xf…

java遍历删除原理,Java 垃圾回收机制实现原理

一、垃圾回收机制的意义Java语言中一个显著的特点就是引入了垃圾回收机制&#xff0c;使c程序员最头疼的内存管理的问题迎刃而解&#xff0c;它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制&#xff0c;Java中的对象不再有“作用域”的概念&…

matlab简易编程,MATLAB简单编程

本帖最后由 wanggh 于 2016-12-5 14:47 编辑用数值差分、SOR迭代法求雷诺方程和用牛顿迭代法求解轴向柱塞泵滑靴副压力场的算法&#xff0c;%油膜厚度场、压力场迭代 MATLAB只认弧度制&#xff0c;不认角度制clear all; % (60rpm1rad/s)wg1000; %1000…

php删除字段某个字段,php数如何组删除某个字段

【摘要】PHP即“超文本预处理器”&#xff0c;是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言&#xff0c;与C语言类似&#xff0c;是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及 PHP 自创的语法。下面是php数如何组删除某个字段&#xff0c;让我们一起…

JAVA table word,实战 | Java读取Word,包含表格!

本文转载自微信公众号「JAVA日知录」&#xff0c;作者单一色调。转载本文请联系JAVA日知录公众号。不能每天都发鸡汤呀&#xff0c;今天分享一篇开发实战。业务需求我们有这样一个需求&#xff0c;需要抽取出WORD文档中的内容&#xff0c;然后组装成特定的json格式发送给第三方…

mysql分列查询,Mysql导出问题,乱码问题,为分列问题解决!!!

前言&#xff1a;本文可以先阅读完再跟着做。Mysql查询出的数据导出为csv最近遇到同学的一个需求&#xff0c;要求差寻一些数据然后导出给他&#xff0c;因为之前也有做过类似的事情&#xff0c;觉得可以一下就搞定&#xff0c;但是居然出现乱码又出现没有分列的情况&#xff0…

微信你scope 参数错误 php,微信开发: scope参数错误或没有scope权限解决方法

scope为snsapi_userinfo 未关注者点击授权提示 scope参数错误或没有scope权限解决方法出现这种错误网上查出现有的原因是:订阅号没有相关的权限账号没有认证&#xff0c;没有相关的权限那么这里遇到问题两种都不是。开发账号是 服务号&#xff0c;而且也是认证号。解决方法:错…

Linux怎么查看保存的密码,在Linux中查看已保存的WiFi密码

在安装流行操作系统时&#xff0c;如 Windows 10、Ubuntu、macOS 等&#xff0c;都会要求用户提前输入 WiFi 密码。特别是 Ubuntu 系统&#xff0c;在配置安装向导时就可以连接 WiFi&#xff0c;以方便在系统安装过程就从网络获取最新更新&#xff0c;并在安装完成后就为用户提…

linux 网卡 巨帧,Linux Kernel e1000e驱动巨型帧处理绕过安全检查漏洞

发布日期&#xff1a;2009-12-29更新日期&#xff1a;2010-01-13受影响系统&#xff1a;Linux kernel 2.6.32.3描述&#xff1a;--------------------------------------------------------------------------------BUGTRAQ ID: 37523CVE(CAN) ID: CVE-2009-4538Linux Kernel是…

linux下如何启动vsftp服务,如何在Ubuntu 18.04上使用VSFTP快速设置FTP服务器

如果您需要配置一个FTP服务器快速启动运行&#xff0c;那么VSFTP的易用性是无与伦比的。如果你想将应用程序迁移到最新版本Ubuntu Linux服务器中&#xff0c;并且需要快速启动并运行FTP服务器。如何操作&#xff1f;这实际上非常简单。这里将使用VSFTP服务器向您展示如何做到这…

红帽linux kvm,初识RedHat虚拟化—KVM

redhat虚拟化之KVM初识虚拟化简介&#xff1a;虚拟化是指计算机元件在虚拟的基础上而不是真实的基础上运行。虚拟化技术可以扩大硬件的容量&#xff0c;简化软件的重新配置过程。CPU的虚拟化技术可以单CPU模拟多CPU并行&#xff0c;允许一个平台同时运行多个操作系统&#xff0…

Linux中的软件源详解,Ubuntu Linux 软件源详解

中国台湾 台湾大学更新服务器(推荐网通用户使用&#xff0c;强烈推荐此源&#xff0c;比较完整)&#xff1a;deb http://Ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy main restricted universe multiversedeb-src http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy main restricted univ…

pc版android sd卡,告别瓶颈:安卓闪存(SD卡)I/O优化

告别瓶颈&#xff1a;安卓闪存(SD卡)I/O优化闪存(SD卡)调度器现在电脑的瓶颈往往不是什么内存CPU&#xff0c;而且吱吱嘎嘎的硬盘。在安卓机上&#xff0c;情况十分类似——虽然安卓机和SSD一样使用闪存&#xff0c;但没有专门的主控&#xff0c;速度好不到哪里去。由于成本限制…

android 常用开发插件,Android Studio 开发利器【常用插件】

1.ADB IdeaADB操作快捷菜单&#xff0c;快速清除数据&#xff0c;重启应用&#xff0c;卸载应用等快捷键&#xff1a;Windows: CtrlAltShiftAMac OSX: CtrlShiftA当然&#xff0c;你可以在KeyMap处修改为自己喜欢的按键。2.postfix支持Log,Toast,Logd的快速书写3.AndroidCodeGe…

android mov转mp4格式转换,如何在线将MOV文件转换成MP4文件?

Renee Video Editor-功能强大的视频编辑软件免费 软件免费试用(仅限非商业用途)。视频剪辑 支持简易剪辑、批量剪辑、高级剪辑。操作简单 界面简洁&#xff0c;只需简单几步即可快速完成操作。功能强大软件还支持剪切、裁剪、旋转、转换、合并、特效、水印、字幕等多种功能。格…

html5文章页面,文章页面的设计《 HTML5 与 Bootstrap 应用实例 》

文章页面的设计跟主页差不多&#xff0c;页头&#xff0c;底部边栏&#xff0c;还有页脚都是一样的&#xff0c;不同是&#xff0c;页面的主内容区域分成两部分 ... 左边占用 8 个网格宽度&#xff0c;显示文章的内容&#xff0c;比如标题&#xff0c;正文&#xff0c;文章的评…

qwebkit 服务器调用本地html方法,用qt的QWebkit类调用谷歌地图

先说下&#xff0c;我这悲剧的一天&#xff0c;用qt5.0.2这个版本搞了一个上午都没有搞出来&#xff0c;无赖呀。。。突然想了下&#xff0c;还是换个版本吧&#xff01;就用qt4.7.4版本了&#xff0c;哎哟喂&#xff0c;居然就调出来了呢&#xff01;其实网上的文章大多是复制…

win7设置定时锁定计算机,Win7系统锁定计算机怎么设置?Win7系统锁定计算机的设置方法...

相信大家都知道&#xff0c;长时间不操作计算机&#xff0c;计算机就会自动进入锁定状态&#xff0c;不过&#xff0c;最近有Win7系统用户表示不想让计算机自动进入锁定状态。那么&#xff0c;Win7系统锁定计算机怎么设置呢&#xff1f;下面&#xff0c;我们就一起往下看看Win7…