今天的題目是-反轉一串數字。
我會先自己解過一次,再參考答案,這篇文章會記錄我的解法,若是我覺得其他解法有值得注意的地方,也許也會記錄在這裡。。
題目
— Directions
Given an integer, return an integer that is the reverse ordering of numbers.
— Examples
reverseInt(15) === 51
reverseInt(981) === 189
reverseInt(500) === 5
reverseInt(-15) === -51
reverseInt(-90) === -9
反轉字串
有時候題目可能會限制數字的位元數,要注意
我的解法
1 | function reverseInt(n) { |
思路:
先將傳入的數字使用絕對值轉成正數,接著就是轉為字串、轉成陣列、反轉、拼回字串。
回傳之前用三元運算子判斷,n小於零嗎?是-將反轉後的字串前面加上負號,轉為整數後回傳,不是-將反轉後的字串轉成整數後直接回傳。
note
Math.abs
parseInt
parseInt只會轉換字串中的數字,其他被視為非數字的符號會被移除,也就是說,parseInt(-153) = -153,parseInt(153-) = 153,前者的減號被視為負號,是這個數字的一部分,後者的減號被視為減號,並不是數字的一部分。
其他解法
1 | function reverseInt(n) { |
思路:
Math.sign若是遇到負數會回傳-1,正數回傳1,0則回傳0,運用這個特性來根據傳入的數字翻轉結果的正負屬性。
其實我們不一定需要reversed這個變數,可以直接把這串程式碼丟到parseInt裡面,但是這樣會不好讀。
好的程式碼應該要很直觀、簡潔,且好讀,為了這個目的,稍微長一點也可以。