7.整数反转

mac2022-06-30  21

题目

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例 1:

输入: 123 输出: 321

示例 2:

输入: -123 输出: -321

示例 3:

输入: 120 输出: 21

注意:

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

一. 字符串翻转

先将数字转换为字符串,再将字符串翻转之后转换为数字,并考虑边界即可。

js实现

/** * @param {number} x * @return {number} */ var reverse = function(x) { var plus = true if (x < 0) { plus = false x = -x } // 翻转字符串 var s = x.toString() var sList = s.split('') sList.reverse() s = sList.join('') // 去除头部的`0` s.replace(/\b(0+)/gi,"") // 判断是否溢出 if (plus) { if (s.length > 10 || s.length === 10 && s > "2147483647") { return 0 } } else { if (s.length > 10 || s.length === 10 && s > "2147483648") { return 0 } } if (plus) { return Number(s) } else { return -Number(s) } };

复杂度分析

时间复杂度:O(n) 空间复杂度:O(n)

测试结果

✔ Accepted ✔ 1032/1032 cases passed (84 ms) ✔ Your runtime beats 95.02 % of javascript submissions ✔ Your memory usage beats 51.91 % of javascript submissions (35.7 MB)

二. 直接使用数字进行翻转

取输入数字的个位,将结果乘十后再加上这个数再作为结果,知道输入数字为0,返回结果即可。

js实现

/** * @param {number} x * @return {number} */ var reverse = function (x) { var answer = 0 var plus = true if (x < 0) { plus = false x = -x } while (x > 9) { var remain = x % 10 x = (x - remain) / 10 answer = answer * 10 + remain } if (plus) { if (2147483647 - x < answer * 10) { return 0 } else { return answer * 10 + x } } else { if (2147483648 - x < answer * 10) { return 0 } else { return - (answer * 10 + x) } } };

复杂度分析

时间复杂度:O(n) 空间复杂度:O(1)

测试结果

✔ Accepted ✔ 1032/1032 cases passed (80 ms) ✔ Your runtime beats 98.54 % of javascript submissions ✔ Your memory usage beats 88.03 % of javascript submissions (35.5 MB)
最新回复(0)