#はじめに
こんばんは.
M1就活生がLeetCodeから,easy問題を中心にPythonを用いて解いていきます.
↓では,解いた問題のまとめを随時更新しています.
まとめ記事
#問題
今回解いたのは,難易度easyから 問題66のPlus One です.
問題としては,整数を表す10進数が1桁ずつ入った配列digits
が与えられたとき,その数字を 1 増やすというもの.例えば,digits = [9]
であれば,Outputは[1, 0]
というふうに位上がりが発生します.
入力例と出力例は以下の通りです.
Example 1:
Input: digits = [1,2,3]
Output: [1,2,4]
Explanation: The array represents the integer 123.
Example 2:
Input: digits = [4,3,2,1]
Output: [4,3,2,2]
Explanation: The array represents the integer 4321.
Example 3:
Input: digits = [0]
Output: [1]
#書いたコード
書いたコードが以下になります.
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
string_digits = ''.join(map(str, digits))
plusone_string_digits = str(int(string_digits) + 1)
return list(map(int, plusone_string_digits))
まず,入力配列digits
をjoin()
メソッドを使います.数値のリストを連結する場合,join()
ではエラーとなるため,map()
で文字列に変換してから連結させます.リスト内包表記を使っても同様の処理を記述できます.
>>> digits = [1, 2, 3]
>>> string_digits = ''.join(digits)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected str instance, int found
>>> string_digits = ''.join(map(str, digits))
>>> string_digits
'123'
>>> string_digits = ''.join([str(n) for n in digits])
>>> string_digits
'123'
文字列として連結した後,整数型で+1
を計算し,それを再度リストとして返しました.
Pythonでは,list()
を使うと,文字列を1文字ずつリストに変換することができます.join()
同様,数値ではエラーとなります.map()
を使うか,リスト内包表記を使って数値に変換することで,うまくリストに変換することができます.
>>> string_digits = '123'
>>> plusone_digits = list(string_digits)
>>> plusone_digits
['1', '2', '3']
>>> plusone_digits = list(int(string_digits))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>> plusone_digits = list(map(int,string_digits))
>>> plusone_digits
[1, 2, 3]
>>> plusone_digits = list([int(n) for n in string_digits])
>>> plusone_digits
[1, 2, 3]
#おわりに
Pythonを使うと,簡単に解くことができますが,メソッドや仕様を深く理解できるので勉強になります.しかし,アルゴリズム力を高めるためには,組み込み関数やメソッドに頼らずに解くべきですね笑
今回書いたコードはGitHubにもあげておきます.