原題鏈接在此 https://leetcode.cn/problems/reverse-integer/

      一個常見的算法問題是反轉正整數:將 12345 變成 54321。乍一看,這個問題似乎很簡單——將整數轉為字符串,然后轉為數組,反轉數組,然后將其轉為字符串,最后再次化為整數。雖然該解決方案可能會得到“54321”,但這并不是解決問題的最佳方法。

      如果算法的輸入值是整數,并且預期輸出是整數,那么問題的最佳解決方案不涉及將整數轉換為另一種數據類型。相反,要解決簡單的“反轉整數”問題,您應該使用模和簡單的數學。

      首先要做的是編寫一個函數,我將其稱為reverseNum,它接受一個數字。然后,初始化一個新變量,調用result并將其設置為零。結果就是你最終將返回的結果:

      function?reverseNum(num)?{
      ????let?result?=?0

      ????//...

      ????return?result
      }

      現在,您想要對數字執行操作,直到輸入等于零。為此,創建一個 while 循環:

      function?reverseNum(num)?{
      ????let?result?=?0

      ????while?(num?>?0)?{
      ????????//...
      ????}

      ????return?result
      }

      在 while 循環內,您要做的第一件事是獲取數字的模。模運算符 (%) 返回余數,因此如果執行類似 的操作13%10,結果將為 3,因為 13/10 的余數為 3。在此算法中,您需要重復獲取輸入數字的最后一個值,這可以使用模來完成


      function?reverseNum(num)?{
      ????let?result?=?0

      ????while?(num?>?0)?{
      ????????let?mod?=?num?%?10
      ????????//...
      ????}

      ????return?result
      }

      現在您已經有了模數,您需要修改原始數字,以便最終值不再包含在數字中。為此,您必須將數字除以 10,并對該操作執行 Math.floor() :

      function?reverseNum(num)?{
      ????let?result?=?0

      ????while?(num?>?0)?{
      ????????let?mod?=?num?%?10
      ????????num?=?Math.floor(num/10)
      ????????//...
      ????}

      ????return?result
      }

      最后,您需要修改“結果”變量。您想要將“mod”添加到結果中,但每次執行 while 循環時,您都需要將現有結果乘以 10,以便它變得更長,而不是簡單地將數字的所有值相加:就是這樣!為了測試這個解決方案是否有效,讓我們使用真值表嘗試數字“123”:

      結果 mod num
      0 3 12
      0*10 +3 = 3 2 1
      3*10 +2 = 32 1 0
      32*10+1 = 321

      由于 num 現在為 0,因此 while 循環不再執行,函數返回結果,即 321。


      如果輸入可以是正數或負數,您可以通過在開始時檢查是否正確來輕松修改此函數,然后根據需要在末尾添加負號。

      首先,實例化一個變量并將其設置為布爾值。如果輸入數字為正數,則無需更改變量。如果為負數,則將該變量設置為“false”,并將輸入的數字設置為其自身的絕對值:


      function?reverseNum(num)?{
      ????let?pos?=?true
      ????if?(num?<?0)?{
      ????????pos?=?false
      ????????num?=?Math.abs(num)
      ????}

      ????let?result?=?0

      ????while?(num?>?0)?{
      ????????let?mod?=?num?%?10
      ????????num?=?Math.floor(num/10)
      ????????result?=?result?*?10?+?mod
      ????}

      ????//...
      }

      然后,在最終的 return 語句中,您需要檢查 'pos' 變量是 true 還是 false。如果為 true,則只需返回結果即可。如果為 false,則說明輸入的值為負數,因此返回結果乘以 -1:


      function?reverseNum(num)?{
      ????let?pos?=?true
      ????if?(num?<?0)?{
      ????????pos?=?false
      ????????num?=?Math.abs(num)
      ????}

      ????let?result?=?0

      ????while?(num?>?0)?{
      ????????let?mod?=?num?%?10
      ????????num?=?Math.floor(num/10)
      ????????result?=?result?*?10?+?mod
      ????}

      ????return?pos???result?:?(-1?*?result)
      }



      點贊(1) 打賞

      評論列表 共有 0 條評論

      暫無評論

      服務號

      訂閱號

      備注【拉群】

      商務洽談

      微信聯系站長

      發表
      評論
      立即
      投稿
      返回
      頂部