我编写了以下代码来反转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;
};
答案 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;
};