#はじめに
こんばんは.
M1就活生がLeetCodeから,easy問題を中心にPythonを用いて解いていきます.
↓では,解いた問題のまとめを随時更新しています.
まとめ記事
#問題
今回解いたのは,難易度easyから 問題7のReverse Integer です.
問題としては,符号付き整数xを反転させて返すというもの.なお,反転後の値が符号付き32ビット整数の範囲を超える場合は0を返します.
Example 1:
Input: x = 123
Output: 321
Example 2:
Input: x = -123
Output: -321
Example 3:
Input: x = 120
Output: 21
Example 4:
Input: x = 0
Output: 0
#書いたコード
とりあえず,思いついたままに書いてみました.
class Solution:
def reverse(self, x: int) -> int:
while (x % 10 == 0):
x /= 10
if x >= 0:
reverse_x = int(str(x)[::-1])
if x < 0:
reverse_x = -1 * int(str(-1*x)[::-1])
return reverse_x
桁の反転のため,一度string型に変換してからスライスでリストの最後から順番に取り出します.なお,x=120
などの場合に,桁を反転させるとOutput: 21
となるように,x
を10で割った余りが0じゃなくなるまで,x
を10で割り続けます.また,x
がプラスかマイナスかで反転後の値に-1を掛けます.
できたできたと思いきや,反転後の値の範囲について記述していませんでした.
以下の条件が必要になりますね.
min_reverse_x = -2 ** 31
max_reverse_x = -2 ** 31 -1
if reverse_x in range(min_reverse_x, max_reverse_x):
return 0
解法を見ながら条件文を記述しましたが,値が範囲内かどうかの判定には,if
とrange
を使っても判定できるみたいですね.これはスマートでわかりやすいです.
#おわりに
LeetCodeには,Testcaseを変化させながら,評価できる機能が備わっています.予想通りの結果になることもありますが,例外処理も意識したコーディングをしていきたいですね.
今回書いたコードはGitHubにもあげておきます.