Leetcode: 反转32-bit整数
2019-05-21 11:05
281 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/guyuan002/article/details/90402907
真的没意思的一道题,刚开始还想用stack做,后来只能感叹python的强大,直接反转字符串,核心代码就是[::-1]
class Solution: def reverse(self, x: int) -> int: if x > -10 and x < 10: return x sign = 1 if x < 0: sign = -1 reversestr = str(abs(x))[::-1] res = sign*int(reversestr.lstrip('0')) if res > 2**31 - 1 or res < -2**31: return 0 return res
32ms,beat 98%
EDIT:刚开始觉得这道题出得不好,但其实只是python太强大以至于有点cheating的感觉,这道题的本质其实挺有用的:1. 考察类型转换,2. 如何用数学的方法获取一个数字的每一位数字。下面是两个Java基于数学的解:
- 这个解不是很优雅,先取绝对值(注意-2**31这个值是没法取到绝对值的,所以算一种特殊情况),然后获取每一位数字(并以个十百千万的顺序推进一个array),同时maintain一个stack,里面储存对应的divisor (位)。// 1326 -> [6, 2, 3, 1], div_arr= [1, 10, 100, 1000]。然后反转div_arr,对应相乘并相加就可以了
3 ms, beat 41%.
class Solution1 { public int reverse(int x) { if (x < 10 && x > -10) return x; int sign = 1; if (x < 0) sign = -1; long y = Math.abs(x); ArrayList<Long> digit = new ArrayList<>(); Stack<Long> div = new Stack<>(); long divisor = 1; while (y != 0){ long d = (y/divisor)%10; digit.add(d); div.push(divisor); y = y - d*divisor; divisor *= 10; } long res=0; for (int i = 0; i < digit.size(); i++){ res = res + digit.get(i) * div.pop(); // "res < 0" resolves the "Integer.MIN" case if (res > Integer.MAX_VALUE || res < 0) return 0; } int result = ((int) res); return sign*result; } }
- 一种更优雅的解:第一种解法没想到get digit和reverse这两步其实可以同时进行的,也就是说根本不用数组和stack,每当获取一个数字,将目前的反转数字乘以10然后加上这个数字就行了。// 1326 -> 010+6 = 6 -> 610+2 = 62 -> 6210+3=623 -> 62310+1 -> 6231
1ms, beat 100%.
class Solution2 { public int reverse(int x){ long res = 0; while (x != 0) { res = res * 10 + x % 10; if (res > Integer.MAX_VALUE || res < Integer.MIN_VALUE) return 0; x /= 10; } return ((int)res); } }
相关文章推荐
- LeetCode给出一个 32 位的有符号整数,将这个整数中每位上的数字进行反转。
- LeetCode7. 整数反转
- Leetcode 0007. 整数反转
- LeetCode(2)整数反转
- LeetCode刷题记——第7题(整数反转)
- leetcode 7. 反转整数(c++版)
- 【leetcode每日一题】【2019-04-28】7. 整数反转
- C语言刷LeetCode:简单篇:整数反转
- leetcode 007 反转整数
- leetcode 7 使用字符串操作反转整数
- LeetCode 7 整数反转
- LeetCode 7 :Reverse Integer ---- 反转int整数
- [LeetCode-7] Reverse Integer(反转整数)
- Leetcode Reverse Integer 反转整数
- leetcode--整数反转--python
- Leetcode题库-整数反转(java语言版)
- LeetCode:第7题: 反转整数(reverse-integer)
- leetcode-腾讯精选练习(50 题) #7整数反转
- LeetCode 7. Reverse Integer 整数反转
- LeetCode刷题第一天 第7题整数反转 腾讯50题