在JavaScript中反转整数
我已经编写了以下代码来反转JavaScript中的整数。它工作正常,但在输入-900000时返回0。有人知道会出什么问题吗在JavaScript中反转整数,javascript,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;
/**
* @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;
};
/**
*@param{number}x
*@return{number}
*/
var反向=函数(x){
var负值=假;
var-k;
var新_字符串;
如果(x你不需要从负数中切掉-
符号,你已经将绝对值取为x
。去掉那个循环,它会移动数字并破坏你的值。有一点很清楚,这比必要的要复杂得多。我认为这会满足你的要求:
const rev = (i) => Math.sign(i) * Number(('' + Math.abs(i)).split('').reverse().join(''))
看起来太复杂了。这应该足够了:
函数反向(n){
返回数字(Array.from(String(Math.abs(n))).reverse().join(“”))*数学符号(n);
}
控制台日志(反向(144));
log(反向(-90000));
一些优秀的答案已经发布
我决定展示一个稍微不同的变化:
- 使用“递归”处理否定的情况
- 函数的其余部分只关注积极的情况
- 将每个中间计算分解为自己的行
下面是一段代码片段,带有注释,说明了-123
如何变成-321
:
功能反转(x){
if(x<0)返回-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”
报税号码(修订版);
}
console.log(反向(-123));//输出:-321
console.log(反向(0));//输出:0
console.log(反向(-900000));//输出:-9
这是我在Leetcode上玩过之后的变体。
条件:
给定一个32位有符号整数,整数的倒数
假设我们正在处理一个只能存储
32位有符号整数范围内的整数:[−231, 231 − 1] .为了
这个问题的目的是,假设您的函数在
反向整数溢出
const reverse=函数(x){
const revInt=parseFloat(x.toString().split(“”).reverse().join(“”))*数学符号(x);
常量maxInt=(2**31)-1;
常数minInt=-(2**31);
return(revInt>=minInt&&revInt这个for循环的意义是什么?`for(var i=0;iabs
输入了你期望它是什么?谢谢Scott。我实际上来自PHP背景,不熟悉JavaScript。只是在解决问题的同时学习它。但是非常感谢,因为我必须在下一步处理这些解决方案的加载时间。我想我发现有人对该语言不熟悉。:-)我的观点与加载时间无关,也与您的解决方案的大小无关。相反,我只想指出,您手动执行的许多技术已经内置。来自@StephenQuan的解决方案实际上更有效地显示了这一点。我喜欢这里的递归。这使得它比其他解决方案的Math.sign更干净代码>版本。
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;
};