Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
Example2: x = -123, return -321
Have you thought about this?
Here are some good questions to ask before coding. Bonus points for you if you have already thought through this!
If the integer's last digit is 0, what should the output be? ie, cases such as 10, 100.
Did you notice that the reversed integer might overflow? Assume the input is a 32-bit integer, then the reverse of 1000000003 overflows. How should you handle such cases?
For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
<Solution>
這題不難,要注意的地方是 overflow 的問題
int 的範圍是 -2^31 到 2^31 -1,也就是 -2,147,483,648 到 2,147,483,647
如果用 long 的型態去存,就不用想太多, 大於 2,147,483,647 或小於-2,147,483,648,就回傳0
但如果不想用 long,想直接用 int,也很簡單
因為每次 iteration 都會乘10,所以把最大範圍都先除10
2,147,483,647 / 10 = 2,147,483,64
-2,147,483,648 / 10 = -2,147,483,64
那在乘10之前,檢查是否大於 2,147,483,64 或小於-2,147,483,64 就可以了
另外最後一點,正負號不會影響運算結果
可以自己手動算一下
code 如下
C++
Java<Solution>
這題不難,要注意的地方是 overflow 的問題
int 的範圍是 -2^31 到 2^31 -1,也就是 -2,147,483,648 到 2,147,483,647
如果用 long 的型態去存,就不用想太多, 大於 2,147,483,647 或小於-2,147,483,648,就回傳0
但如果不想用 long,想直接用 int,也很簡單
因為每次 iteration 都會乘10,所以把最大範圍都先除10
2,147,483,647 / 10 = 2,147,483,64
-2,147,483,648 / 10 = -2,147,483,64
那在乘10之前,檢查是否大於 2,147,483,64 或小於-2,147,483,64 就可以了
另外最後一點,正負號不會影響運算結果
可以自己手動算一下
code 如下
C++
沒有留言:
張貼留言