给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。

示例1:

输入:x = 123 输出:321

示例2:

输入:x = -123 输出:-321

示例3:

输入:x = 0 输出:0

提示:

  • -231 <= x <= 231 - 1

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/reverse-integer
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

Array.reverse + Array.join

不推荐

  1. function reverse(x: number): number {
  2. let s = x.toString();
  3. const flag = s.indexOf('-') === 0;
  4. if (flag) {
  5. s = s.substr(1, s.length - 1);
  6. }
  7. s = s.split('').reverse().join('');
  8. if(flag) {
  9. s = '-' + s;
  10. }
  11. const num = Number(s);
  12. return Math.pow(-2, 31) <= num && Math.pow(2, 31) - 1 >= num ? num : 0;
  13. };

数学推导

  1. // 弹出 x 的末尾数字 digit
  2. digit = x % 10
  3. x /= 10
  4. // 将数字 digit 推入 rev 末尾
  5. rev = rev * 10 + digit

时间复杂度:O(log|x|)
空间复杂度:O(1)

  1. function reverse(x: number): number {
  2. let rev = 0;
  3. while (x !== 0) {
  4. const digit = x % 10;
  5. x = ~~(x / 10);
  6. rev = rev * 10 + digit;
  7. if (rev < Math.pow(-2, 31) || rev > Math.pow(2, 31) - 1) {
  8. return 0;
  9. }
  10. }
  11. return rev;
  12. };