renjie-run / blog

Personal Blog
2 stars 0 forks source link

[算法] - 整数反转 #14

Open renjie-run opened 4 years ago

renjie-run commented 4 years ago

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

示例1

输入: 123
输出: 321

示例2

输入: -123
输出: -321

示例3

输入: 120
输出: 21

注意:

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

思路 这道算法比较简单,但是有两个点需要特别注意:第一,就是正负号的不变性;第二,就是判断反转后的值是否在有效值范围内。 核心思想就是利用字符串的 split() 方法,拆解字符串,分别利用数组的反转方法 reverse() 以及数组项合并为字符串的方法 join() 来达到最终目的。

/**
 * @param {number} x
 * @return {number}
 */
var reverse = function(x) {
    let MAX = Math.pow(2, 31);
    let sign = Math.sign(x);
    let result = (Math.abs(x) + '').split('').reverse().join('') * sign;
    return result > MAX - 1 || result < -MAX ? 0 : result;
};

其实,这个解法在运行时间以及内存消耗两个方面并不是很理想,还需要探索更优解。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/reverse-integer