Arrayでのインクリメント方法で詰まったのでメモる。
Arrayでのインクリメント
スパッと思いつかなかったのでメモメモ。
ちなみに具体例としては、
array1 = [1,1,1]
array2 = [1,7,9]
だったら
array1 = [1,1,2]
array2 = [1,8,0]
みたいな感じになるやつ。
実はLeetCodeでも解いたことがあったけど、
Plus One
どうせならPythonっぽい答えを作ってみたかったので色々調べた感じ下のやつが良さげ。
def increment(A: List[int]) -> List[int]:
A[-1] += 1
for i in reversed(range(1,len(A))):
if A[i] != 10:
break
A[i] = 0
A[i-1] += 1
else:
if A[0] == 10:
A[0] = 1
A.append(0)
return A
といった感じで行ける。あと読みやすい。
実行してみたら速度も気のせいか少し速くなった。
元々の解答
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
if digits[-1] < 9:
digits[-1] += 1
return digits
elif digits[0] == 9 and len(digits) == 1:
return [1,0]
else:
digits[-1] = 0
digits[0:-1] = self.plusOne(digits[0:-1])
return digits
# Runtime: 28 ms, faster than 88.73% of Python3 online submissions for Plus One.
# Memory Usage: 14.2 MB, less than 45.95% of Python3 online submissions for Plus One.
新しいやつ
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
digits[-1] += 1
for i in reversed(range(1,len(digits))):
if digits[i] != 10:
break
digits[i] = 0
digits[i-1] += 1
else:
if digits[0] == 10:
digits[0] = 1
digits.append(0)
return digits
# Runtime: 28 ms, faster than 90.07% of Python3 online submissions for Plus One.
# Memory Usage: 14.3 MB, less than 50.47% of Python3 online submissions for Plus One.
ひとまずスッキリしたので今回はここまで。
コメント
コメントを投稿