2017-06-27 30 views
1

我已經編寫了以下代碼以在JavaScript中反轉整數。它工作正常,但在給定-900000的輸入時返回0。有誰知道什麼可能是錯的?在JavaScript中反轉整數

/** 
* @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; 
}; 
+1

什麼是這個for循環的地步? 'for(var i = 0; i

+0

你想要完成什麼?你期待這件事呢?另外,通過-1002給出-2200。 – Jorg

+0

@StephenQuan:如果它是負數,我需要從中刪除負號。哦,我看到我已經完成了上面的工作。 –

回答

2

你不需要切掉從負數-標誌,你已經採取的絕對值作爲x。放下那個移動數字並破壞你的值的循環。

2

有一點很明顯,這比需要的複雜得多。我認爲這會做你想做的:

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

謝謝斯科特。我實際上來自PHP背景,並且是JavaScript的新成員。在解決問題的同時學習它。但是非常感謝,因爲下一步我必須在這些解決方案的加載時間上進行工作。 –

+0

我以爲我發現了一個新的語言。 :-)我的觀點與加載時間無關,或嚴格與解決方案的大小無關。相反,我只是想指出,您手動完成的許多技巧都已內置。@StephenQuan的解決方案實際上更有效地顯示了這一點。 –

1

看起來過於複雜。這應該是足夠了:

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

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

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

+0

我喜歡這裏的遞歸。這使得它比其他解決方案的「Math.sign」版本更清潔。 –