7 反转整数
题目描述
给定一个 32 位有符号整数,将整数中的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
示例 4:
输入: -2147483648
输出: -8463847412
注意:
假设我们的环境只能存储 32 位有符号整数,其数值范围是
[
−
231
,
231
−
1
]
[−231, 231 − 1]
[−231,231−1]。根据这个假设,如果反转后的整数溢出,则返回 0。
解题思路
-
先想到使用 x%10 得到最后一位,使用 x//10更新x,但最终程序运行时间超出要求
class Solution: def reverse(self, x): """ :type x: int :rtype: int """ result = 0 if x == 0: return result Input = x while Input != 0: num = Input% 10 Input = Input // 10 result = result*10 + num if result>2**31-1: result = 0 if x < 0: result = -result return result
class Solution { public: int reverse(int x) { long long result = 0; while (x != 0) { result = result * 10 + x % 10; x /= 10; } if (result > INT32_MAX || result < INT32_MIN) { result = 0; } return result; } };
-
将整型数字转化成字符串,然后反转,再转化成整型
用时64ms, 打败97.34%的用户
class Solution: def reverse(self, x): """ :type x: int :rtype: int """ str_x = str(abs(x)) str_result = str_x[::-1] result = int(str_result) if x<0: result = -result if abs(result)>2**31-1: result = 0 return result
class Solution { public: int reverse(int x) { string str_x = to_string(x); if (str_x[0] == '-') { std::reverse(str_x.begin()+1, str_x.end()); } else { std::reverse(str_x.begin(), str_x.end()); } long long result = stoll(str_x); if (result>INT_MAX || result < INT_MIN) { result=0; } return result; } };
to_string(arg)
: 将其它类型转换为 string
std::stoll(arg)
: 转化成整型