力扣7. 整数反转

方法一:官方给的,自己懂了后照着敲了一遍

class Solution {public int reverse(int x) {int rev = 0;while (x != 0) {//if判断条件过于复杂,我好不容易看懂了if (rev < Integer.MIN_VALUE / 10 || rev > Integer.MAX_VALUE / 10) {return 0;}int digit = x % 10;x /= 10;rev = rev * 10 + digit;}return rev;}
}

1.收获也有,
Java中整型最大值和最小值用两个变量表示:
在这里插入图片描述
在这里插入图片描述
2.在JDK中,整形类型是有范围的,最大值为Integer.MAX_VALUE,即2147483647,最小值为Integer.MIN_VALUE -2147483648。
对整形最大值加1,2147483648(越界了),那么此时值为多少呢?结果是-2147483648,即是Integer.MIN_VALUE。
类似的,对Integer.MIN_VALUE取反或者取绝对值呢?仍为Integer.MIN_VALUE,因为值为-2147483648,绝对值2147483648超过Integer.MAX_VALUE 2147483647。
所以就有以下结果
Integer.MAX_VALUE + 1 = Integer.MIN_VALUE
Math.abs(Integer.MIN_VALUE) = Integer.MIN_VALUE (绝对值)
Long,short,byte的结论是相同的。
转自:https://blog.csdn.net/qq_39590763/article/details/85764780
讲的太清楚了,希望原作者原谅我“直接参考”

方法二:力扣评论区网友的,比较好理解

class Solution {public int reverse(int x) {int rev = 0;int temp = 0;while(x!=0){temp = rev*10+x%10;if(temp/10!=rev){//溢出return 0;}rev = temp;x/=10;}return rev;}
}

1.if(temp/10!=rev)怎么就溢出了呢?
因为超过范围后部分数据会被抹去,这时在除以10也不能回到上一次循环,也就表示溢出了
2.这种方法比较野,不是“正派”解法,只适用于 溢出时编译器不报错 的语言,Java就是其一

再看看错误代码:
我第一次写的代码

class Solution {public int reverse(int x) {boolean flag = x>=0?false:true;//区分x正负if(flag){x=-x;}int rev = 0;while(x/10!=0){rev = rev*10+x%10;x /= 10;}rev = rev*10+x%10;if(flag){rev = -rev;}//判断rev是否在32位范围内if(rev>=Integer.MIN_VALUE&&rev<=Integer.MAX_VALUE){return rev;}else{return 0;}}
}

1.首先没分清求余和取模的概念,根本没必要用标志变量flag区分x的正负
2.没理解题目的要求:整数超过 32 位的有符号整数的范围就return 0;因为超过的数根本不会正确表示出来,所以代码

if(rev>=Integer.MIN_VALUE&&rev<=Integer.MAX_VALUE){return rev;}else{return 0;}

无用,我后来明白后想笑
3.可以优化while代码段

while(x!=0){rev = rev *10 + x%10;x/=10;
}

只是简单水平的题都能挖出这么多知识(我经常被菜醒)
生活充满希望!

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

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

相关文章

AndroidManifest.xml中的application中的name属性

被这个不起眼的属性折磨了一天&#xff0c;终于解决了。 由于项目需要&#xff0c;要合并两个android应用&#xff0c;于是拷代码&#xff0c;拷布局文件&#xff0c;拷values&#xff0c;所有的都搞定之后程序还是频频崩溃&#xff0c;一直没有找到原因&#xff0c;学android…

完美单身

我不时遇到一些Java程序员&#xff0c;他们不确定他们应该如何正确实现Singleton模式。 &#xff08;如果您不知道什么是Singleton&#xff0c;请尝试Wikipedia&#xff1a; Singleton模式 &#xff09;。 我并不是在谈论在线程环境中的正确实现。 但是&#xff0c;使用最常见的…

力扣移动零

给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 我写的代码思路是从开始元素找0&#xff0c;找到了就将这个0后面的元素向前移一位 class Solution {public void moveZeroes(int[] nums) {int n nums.length;…

Doclava:来自Google的自定义Javadoc Doclet

Doclava是Google的自定义Javadoc Doclet&#xff0c;由Google Guice使用&#xff08;请参阅稍冷的 Javadocs &#xff09;。 Doclava使用JSilver作为其模板引擎&#xff0c;这是Clearsilver的纯Java实现。 我个人喜欢联合文档的想法&#xff0c;它允许文档在打开的项目上相互链…

linux cat显示若干行

【一】从第3000行开始&#xff0c;显示1000行。即显示3000~3999行 cat filename | tail -n 3000 | head -n 1000 【二】显示1000行到3000行 cat filename| head -n 3000 | tail -n 1000 *注意两种方法的顺序 分解&#xff1a; tail -n 1000&#xff1a;显示最后1000行 tail -n …

【Stackoverflow好问题】java在,如何推断阵列Array是否包括指定的值

问题java中&#xff0c;怎样推断数组Array是否包括指定的值精华回答1.Arrays.asList(...).contains(...) 2.使用 Apache Commons Lang包中的ArrayUtils.containsString[] fieldsToInclude { "id", "name", "location" };if ( ArrayUtils.contai…

力扣移除元素

给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面…

在域驱动设计中使用状态模式

域驱动设计&#xff08;DDD&#xff09;是一种软件开发方法&#xff0c;其中&#xff0c;通过将实现与核心业务概念的不断发展的模型相连接&#xff0c;可以解决问题的复杂性。 该术语是由Eric Evans创造的&#xff0c;并且有一个DDD专用站点可以促进其使用。 根据其定义&#…

使用selenium进行密码破解(绕过账号密码JS加密)

经常碰到网站&#xff0c;账号密码通过js加密后进行提交。通过burp拦截抓到的账号密码是加密后的&#xff0c;所以无法通过burp instruder进行破解。只能模拟浏览器填写表单并点击登录按钮进行破解。于是想到了自动化web测试工具selenium&#xff0c;代码如下&#xff0c;测试效…

力扣删除排序数组中的重复项

给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 我没注意到“有序”这一条…

POJ1789-Truck History .

题目链接&#xff1a;http://poj.org/problem?id1789 题目的大概意思就是给你n个字符串。每个字符串只有7的长度。然后分别给这些字符串编号。不同编号之间的距离就是他们有多少个不同的字母。&#xff08;同一个位置字母不相同也算&#xff09;然后一个编号只能由另一个派生…

Java Fork / Join进行并行编程

最近几年&#xff0c;计算机处理器领域发生了范式转变。 多年来&#xff0c;处理器制造商一直在提高时钟频率&#xff0c;因此开发人员享受到这样的事实&#xff0c;即他们的单线程软件执行得更快&#xff0c;而无需他们付出任何努力。 现在&#xff0c;处理器制造商青睐多核芯…

arm-elf-gcc交叉编译器的使用教程

arm-elf-gcc交叉编译器的使用教程 一开始需要安装arm-elf-gcc&#xff0c;但是这是一个32位的程序&#xff0c;我是安装了64位的系统&#xff0c;据说安装ia32.libs依赖库能运行这个&#xff0c;但是看到博客上面前人安装完了系统图标少了一半&#xff0c;然后就怕了。经过了翻…

力扣删除排序数组中的重复项 II

给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 最多出现两次 &#xff0c;返回删除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 思路&#xff1a; 双指针…

2 android学习资料

http://blog.csdn.net/lmj623565791 http://blog.csdn.net/harvic880925/article/details/50995268转载于:https://www.cnblogs.com/YyuTtian/p/5440930.html

建立自己的GWT Spring Maven原型

大家好&#xff0c; 在观看Justin撰写的有关Spring和GWT的非常有趣的文章时&#xff0c;我认为展示如何构建自己的自定义Maven原型非常有用。我们将展示的原型基于Justin的上一个项目&#xff0c;并包括各种技术&#xff0c;例如Spring &#xff0c; GWT &#xff0c; AspectJ…

C# 连接Oracle数据库异常总结

这2天因为工作需要连接Oracle数据库&#xff0c;中间发生了很多问题 一、使用OleDbConnection连接数据库 ------------------ ProviderOraOLEDB.Oracle.1;User IDsajet;Passwordtech;Data Source(DESCRIPTION (ADDRESS_LIST (ADDRESS (PROTOCOL TCP)(HOST 192.168.66.225)(…

力扣颜色分类

给定一个包含红色、白色和蓝色&#xff0c;一共 n 个元素的数组&#xff0c;原地对它们进行排序&#xff0c;使得相同颜色的元素相邻&#xff0c;并按照红色、白色、蓝色顺序排列。 此题中&#xff0c;我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 思路:将红色和蓝色…

Cassandra,MongoDB,CouchDB,Redis,Riak,HBase比较

克里斯托夫科瓦奇&#xff08;KristfKovcs&#xff09;对六个最受欢迎的“ NoSQL ”数据库实现进行了非常有趣的简短比较 。 除了Kristf的工作之外&#xff0c;我还想提供一些链接&#xff0c;我相信这些链接将对有兴趣关注“ NoSQL ”社区的所有人员提供帮助&#xff1a; No…

程序员需要谨记的九大安全编码规则

历史已经证明&#xff0c;软件设计的缺陷一直是导致其漏洞被利用的最主要的罪魁祸首。安全专家发现&#xff0c;多数漏洞源自常见软件中相对有限的一些漏洞。软件开发者和设计者应当严格检查程序中的各种错误&#xff0c;尽量在软件部署之前就减少或清除其中的漏洞。 下面列举的…