題目
給你一個 32 位的有符號整數(shù) x ,返回將 x 中的數(shù)字部分反轉(zhuǎn)后的結(jié)果。
如果反轉(zhuǎn)后整數(shù)超過 32 位的有符號整數(shù)的范圍 [?231, 231 ? 1] ,就返回 0。
假設環(huán)境不允許存儲 64 位整數(shù)(有符號或無符號)。
示例 1:
輸入:x = 123
輸出:321
示例 2:
輸入:x = -123
輸出:-321
示例 3:
輸入:x = 120
輸出:21
示例 4:
輸入:x = 0
輸出:0
來源:力扣(LeetCode)
鏈接:https://leetcode.cn/problems/reverse-integer
代碼
- 第一想法轉(zhuǎn)字符串倒序
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;
}
}

這結(jié)果一看就無了??
- 套公式:x * 10 + y,舉個例子 123,需要返回 321,第一步 0 * 10 + 3 = 3,第二步 3 * 10 + 2 = 32,第三步 32 * 10 + 1 = 321。
class Solution {
int reverse(int x) {
//轉(zhuǎn)為正數(shù)
int val = x >=0 ? x : -x;
int res = 0;
while (val != 0) {
//取尾數(shù)
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;
}
}