Day 3 - 反轉數字

Day 3 - 反轉數字

今天的題目是-反轉一串數字。
我會先自己解過一次,再參考答案,這篇文章會記錄我的解法,若是我覺得其他解法有值得注意的地方,也許也會記錄在這裡。。


題目

— 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
2
3
4
function reverseInt(n) {
let reversed = Math.abs(n).toString().split('').reverse().join('');
return n<0? parseInt('-'+reversed):parseInt(reversed);
}

思路:
先將傳入的數字使用絕對值轉成正數,接著就是轉為字串、轉成陣列、反轉、拼回字串。
回傳之前用三元運算子判斷,n小於零嗎?是-將反轉後的字串前面加上負號,轉為整數後回傳,不是-將反轉後的字串轉成整數後直接回傳。

note

Math.abs
parseInt
parseInt只會轉換字串中的數字,其他被視為非數字的符號會被移除,也就是說,parseInt(-153) = -153,parseInt(153-) = 153,前者的減號被視為負號,是這個數字的一部分,後者的減號被視為減號,並不是數字的一部分。

其他解法

1
2
3
4
5
function reverseInt(n) {
const reversed = n.toString().split('').reverse().join('');

return parseInt(reversed) * Math.sign(n);
}

思路:
Math.sign若是遇到負數會回傳-1,正數回傳1,0則回傳0,運用這個特性來根據傳入的數字翻轉結果的正負屬性。
其實我們不一定需要reversed這個變數,可以直接把這串程式碼丟到parseInt裡面,但是這樣會不好讀。

好的程式碼應該要很直觀、簡潔,且好讀,為了這個目的,稍微長一點也可以。

note

Math.sign

參考

The Coding Interview Bootcamp: Algorithms + Data Structures

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×