题目
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入:x = 123
输出:321
示例 2:
输入:x = -123
输出:-321
示例 3:
输入:x = 120
输出:21
示例 4:
输入:x = 0
输出:0
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/reverse-integer
代码
- 第一想法转字符串倒序
class Solution {
int reverse(int x) {
if (x == 0) return 0;
int tmp = x > 0 ? x : x * -1;
String string = tmp.toString();
String pre = string[string.length - 1];
String next = "0";
var result = pre != "0" ? pre : "";
for (var i = string.length - 2; i >= 0; i--) {
pre = string[i + 1];
if (string[i] != '0' || pre != 0 || next != '0') {
result += string[i];
}
next = string[i];
}
int value = int.parse(result);
if (value > pow(2, 31)) return 0;
if (x < 0) value *= -1;
return value;
}
}
- 套公式:x * 10 + y,举个例子 123,需要返回 321,第一步 0 * 10 + 3 = 3,第二步 3 * 10 + 2 = 32,第三步 32 * 10 + 1 = 321。
class Solution {
int reverse(int x) {
//转为正数
int val = x >=0 ? x : -x;
int res = 0;
while (val != 0) {
//取尾数
int tmp = val % 10;
//公式:x * 10 + y
res = res * 10 + tmp;
//边界条件 pow(2, 31)
if (res > 2147483648) return 0;
val ~/= 10;
}
return x >= 0 ? res : -res;
}
}