[LeetCode]Reverse Integer
来源:互联网 发布:ubuntu网络配置命令 编辑:程序博客网 时间:2024/06/11 19:26
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
click to show spoilers.
Note:
The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.
绞尽脑汁没有想出来啊,果然是 不做算法不知道自己有多蠢 。。。
查看参考答案后,思路整理如下:
1.考虑如何取出各位数字
这个比较简单,只需要不断的 %10 再 /10 就可以了
e.g. n=123
123%10=3 个位
123/10=12 n=12
12%10=2 十位
12/10=1 n=1
1%10=1百位
1/10=0 n=0 结束循环
2.如何交换个位数字
最低位*10^(位数-1)
次地位*10^(位数-2)
……
最高位*10^0
在实际编程过程中,我们可以先取个位数,再依次向高位取值。每经过一个取值循环,就将已经之前的数*10+新得到的数;
e.g.
先取个位 0*10+3=3
十位 3*10+2=32
百位 32*10+1=321
3.考虑数组溢出的问题
一开始,我觉得你x都已经定义成int类型的了,为什么还会溢出呢?没道理啊。。。
后来发现,原来是数据翻转后可能会溢出。
java的数据类型如下所示:
由于此处算正负号,此处数值范围应该在 -2^31-2^31-1( -2147483648~2147483647 )
如果是1000000009反转后就会溢出了;
需要注意的是,存储翻转后的数不能是int类型的,否则溢出了它会生成一个新数,导致你后面无法判断他是否溢出
如何判断是否溢出
这是一个坑,我们在每一步 之前的数*10+新得到的数 都要判断是否溢出。
别的技术博客都写到了INT_MAX这么一个变量,但是我在API文档中没有找到,eclipse中,此变量也是标红报错,难道是他们默认我们都知道?
此处,我倾向于把最大最小值标出来,而且不采用绝对值判断的方式
最后,把accepted的代码附上,供大家参考
class Solution { public int reverse(int n) { int int_max=(int)Math.pow(2,31)-1; int int_min=-(int)Math.pow(2,31); long sum=0; int t=0; while(n !=0 ){ t=n%10; sum=sum*10+t; n=n/10; if(sum>int_max || sum<int_min){ return 0; } } return (int)sum; }}
- LeetCode:Reverse Integer
- LeetCode: Reverse Integer
- [Leetcode] Reverse Integer
- LeetCode : Reverse Integer
- [LeetCode] Reverse Integer
- Leetcode: Reverse Integer
- LeetCode 7 - Reverse Integer
- leetcode 104: Reverse Integer
- Leetcode : Reverse Integer
- 【leetcode】Reverse Integer
- [LeetCode]Reverse Integer
- LeetCode-Reverse Integer
- [leetcode] Reverse Integer
- LeetCode - Reverse Integer
- leetcode之Reverse Integer
- LeetCode | Reverse Integer
- LeetCode: Reverse Integer
- Leetcode: Reverse Integer
- bzoj 1854 游戏 并查集+贪心 解题报告
- c语言(二)函数
- 从1到n中整数1出现的次数
- AR在各行业的应用
- PDT Standard
- [LeetCode]Reverse Integer
- 线程、多线程与线程池总结
- ssl 2785 询问 并查集+二分
- malloc和new之间的区别
- java并发程序设计总结六:线程池
- json解析文件
- AngularJs的过滤,添加,相同名字的验证
- 51nod1673 树有几多愁(状压DP)
- iOS十进制转二进制