7. Reverse Integer
来源:互联网 发布:成都算法工程师招聘网 编辑:程序博客网 时间:2024/06/05 20:59
题目中明确提出了要考虑越界的问题,首先记录一下各个数据类型的取值范围:
int: 4byte = 32 bit 有符号signed范围:2^31-1 ~ -2^31即:2147483647 ~ -2147483648无符号unsigned范围:2^32-1 ~ 0即:4294967295 ~ 0
unsigned int 0~4294967295
int -2147483648~2147483647
unsigned long 0~4294967295
long -2147483648~2147483647
long long的最大值:9223372036854775807
long long的最小值:-9223372036854775808
unsigned long long的最大值:1844674407370955161
__int64的最大值:9223372036854775807
__int64的最小值:-9223372036854775808
unsigned __int64的最大值:18446744073709551615
本题中的难点就是如何确定越界的问题:
代码如下:
class Solution {public: int reverse(int x) { int result = 0; if(overflow(x)) return 0; while(x != 0){ result = result*10 + x%10; x /= 10; } return result; } bool overflow(int x){ if (x / 1000000000 == 0){ return false; }else if (x == INT_MIN){ return true; } x = abs(x); for (int cmp = 463847412; cmp != 0; cmp/=10, x/=10){ if ( x%10 > cmp%10 ){ return true; }else if (x%10 < cmp%10){ return false; } } return false; } };
现在来分析判断overflow的代码:
首先除以1000000000判断是否为10位数,不是10位数就肯定越界了;
然后判断是否为-2147483648,如果是,则越界。(该数需要单独判断)
最后取x的绝对值,让x从末尾与**边界前9位的反转**463847412比较。(因为如果x不越界的话,最高位肯定不是1就是2了)
bool overflow(int x){ if (x / 1000000000 == 0){ return false; }else if (x == INT_MIN){ return true; } x = abs(x); for (int cmp = 463847412; cmp != 0; cmp/=10, x/=10){ if ( x%10 > cmp%10 ){ return true; }else if (x%10 < cmp%10){ return false; } } return false; }
0 0
- [LeetCode]7.Reverse Integer
- LeetCode 7. Reverse Integer
- LeetCode --- 7. Reverse Integer
- LeetCode 7.Reverse Integer
- [Leetcode] 7. Reverse Integer
- 7.Reverse Integer
- [Leetcode]7.Reverse Integer
- LeetCode 7.Reverse integer
- 7. Reverse Integer
- 7. Reverse Integer
- 7.Reverse Integer
- 7.Reverse Integer
- [LeetCode] 7.Reverse Integer
- 7. Reverse Integer
- 7. Reverse Integer
- 7. Reverse Integer
- 7. Reverse Integer
- 7. Reverse Integer LeetCode
- qt之路
- Zookeeper节点失效测试
- 日志记录 PHP下往linux目录下写日志
- 切换git地址
- JAVA8新特性(Lambda 表达式)
- 7. Reverse Integer
- APIcloud 按两次返回键退出程序,android按两次返回键退出程序
- 算法-第四版-练习1.2.10解答
- Swift - 使用EventKit操作"提醒事项"(2、新增、修改、删除提醒)
- mysql时间日期查询格式
- Codeforces Round #373 (Div. 2) C: Efim and Strange Grade
- Protostuff序列化工具类
- THINKPHP 伪静态 URL重写
- Gradle for Android 使用之旅之gradle的基础