[LeetCode]--Reverse Integer
来源:互联网 发布:医生转行 知乎 编辑:程序博客网 时间:2024/06/07 09:03
题目
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
Note:
The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.
中文题意:给出一个32位整数,要求取其逆序并返回。
注意:输入必须是32位有符号整数,如果逆序后有溢出,则返回0。
分析
这道题看似简单,但是背后有很多陷阱。例如当输入为10010时,返回的应该是什么呢?我们又如何判断取逆序后的数是否溢出呢?
对于第一个问题,我个人认为用int类型定义变量处理会省掉很多麻烦。我们无需判断个位是否为0,只需将输入数做取模运算,再依次序累加即可。
而对于第二个问题,我花费了很长时间才得以解决。这里我们先具体说明一下这道题的算法:
1. 首先,对输入整数(x)做取模运算,即x%10。这时我们得到该整数的最低位(即个位),随后x = x/10,将最低位移除。
2. 然后令结果result=x%10。随即进入循环,令result = result * 10,也即实现原整数的低位向高位转换的过程,移位过后,令result = result + x%10,将x的最低位移入后,再令x = x/10。
3. 重复上一步骤直至x的所有为移出,也即x=0。
我们不难发现,检验结果是否溢出需要在第2步完成,而在第二步的什么位置呢?如果在result = result * 10之后判断,那么乘以10这个过程中就可能已经出现溢出了,结果显然不能达到我们的预期。因此我们应在result = result * 10之前判断,注意,因为这时还没有进行向左移位的操作,因此必须将32位有符号整数的边界除以10,也即减少移位,才能达到目的。
解答
class Solution {public: int reverse(int x) { int result; result=x%10; x=x/10; while(x!=0){ if(result>INT_MAX/10||result<INT_MIN/10) return 0; result=result*10; result=result+x%10; x=x/10; } return result; }};
该算法复杂度为O(n),其中n为输入整数x的位数。
阅读全文
0 0
- 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
- Android画不规则形状
- Java重定向与转发
- android获取屏幕信息
- 第四周项目3(3)——单链表的应用
- 运算放大器分析----虚短和虚断(转载)
- [LeetCode]--Reverse Integer
- 面向对象 单例设计模式
- Win7 64位下Python安装PIL图像处理库
- js str.split([separator[, limit]])注意事项
- 手把手教你申请ENS (Ethereum Name Service)
- JSONObject和JSONArray的转换
- 51nod 1256 乘法逆元
- 回顾大一·C语言编程1.2
- JSP属性范围