在JavaScript中反转整数

时间:2017-06-27 01:44:30

标签: javascript

我编写了以下代码来反转JavaScript中的整数。它工作正常,但在输入-900000时返回0。有谁知道什么可能是错的?

/**
 * @param {number} x
 * @return {number}
 */
var reverse = function(x) {
    var negative_number= false;
    var k;
    var new_string;
    if(x<0){
        negative_number = true;
        x=Math.abs(x);
    }
    var n = x.toString(); // convert from number to string
        // Step 1. Use the split() method to return a new array
    var splitString = n.split(""); // var splitString = "hello".split("");
    // ["h", "e", "l", "l", "o"]
    if (negative_number)
    {
        for (var i=0; i< splitString.length-1; i++)
        {
            splitString[i]=splitString[i+1];
        }
    }
    // Step 2. Use the reverse() method to reverse the new created array
    var reverseArray = splitString.reverse(); // var reverseArray = ["h", "e", "l", "l", "o"].reverse();
    // ["o", "l", "l", "e", "h"]

    // Step 3. Use the join() method to join all elements of the array into a string
    var joinArray = reverseArray.join(""); // var joinArray = ["o", "l", "l", "e", "h"].join("");
    // "olleh"
    //return joinArray;
    var number = Number(joinArray);
    if (negative_number)
        number= -Math.abs(number);
    //Step 4. Return the reversed string
    return number;
};

5 个答案:

答案 0 :(得分:3)

已经发布了一些优秀的答案。

我决定展示一个略有不同的变体:

  • 使用'递归'来处理否定案例
  • 该功能的其余部分只关注正面案例
  • 将每个中间计算分解为自己的行

以下是一段代码段,其中的评论说明了-123成为-321的方式:

function reverse(x) {
  if (x < 0) return -reverse(-x); // reverse(-123) === -reverse(123)
  var str = x.toString(); // "123"
  var strArray = str.split(""); // [ "1", "2", "3" ]
  var revArray = strArray.reverse(); // [ "3", "2", "1" ]
  var rev = revArray.join(""); // "321"
  return Number(rev);
}

console.log(reverse(-123)); // Outputs: -321
console.log(reverse(0)); // Outputs: 0
console.log(reverse(-900000)); // Outputs: -9

答案 1 :(得分:2)

您不需要从负数中删除-符号,您已经将绝对值视为x。删除那个移动数字的循环并破坏你的值。

答案 2 :(得分:2)

有一点很明显,这比必要复杂得多。我想这会做你想要的:

const rev = (i) => Math.sign(i) * Number(('' + Math.abs(i)).split('').reverse().join(''))

答案 3 :(得分:2)

看起来过于复杂。这应该足够了:

function reverse(n) {  
  return Number(Array.from(String(Math.abs(n))).reverse().join('')) * Math.sign(n);
}

console.log(reverse(144));
console.log(reverse(-90000));

答案 4 :(得分:0)

这是我在Leetcode上玩了之后的变体。 条件:

给出一个32位带符号整数,整数的倒数。

假设我们正在处理一个只能存储的环境 32位有符号整数范围内的整数:[− 231,231 − 1]。对于 为此问题的目的,假定您的函数在以下情况下返回0 反向整数溢出。

const reverse = function(x) {
  const revInt = parseFloat(x.toString().split('').reverse().join('')) * Math.sign(x);
  const maxInt = (2 ** 31) - 1;
  const minInt = -(2 ** 31);
  return (revInt >= minInt && revInt <= maxInt) ? revInt : 0;
};