【競技プログラミング】「Plus One」with Python | LeetCode #66

Python

こちらは「Plus One」のPythonによる解答例となっております。この問題は、整数の配列が与えられたとき、その整数に1を足した結果を返す問題です。

問題

非負整数が格納された配列 digits が与えられた場合、その整数に1を足した結果を配列で返します。各要素は1桁の数値であるとします。

  • digits の長さは、1以上100以下です。
  • digits の要素は、0以上9以下の整数です。
  • digits の最上位の整数が0であることはありません。

解法

この問題は、反転処理を用いた1つのアプローチがあります。配列を反転し、一桁ずつ足していき、最後に再度反転して返します。

アルゴリズムの概要を以下に述べます。

  1. 配列を反転します。
  2. 配列の先頭要素に1を足します。
  3. 各要素を10で割り、余りを配列の次の要素に足します。余りが0でない場合は4に進みます。
  4. 配列の次の要素に1を足します。
  5. 3と4を繰り返し、最後に配列を再度反転して返します。

Pythonコード

以下のコードが、「Plus One」を解くためのPythonプログラムとなります。

### Function ##################################################################

def solve(num=0):
    
    solver  = Solution().plusOne
    
    if 1 <= num <= Input().input: id_LIST = [num]
    else: id_LIST = [id+1 for id in range(Input().input)]
    
    for id in id_LIST:
        data    = Input(id)
        ans     = solver(data.digits)
        result  = "OK" if ans==data.ans else "NG"
        print(f"[{str(id).zfill(3)}] {result}, {ans}, {data.ans}")

### Class #####################################################################

class Solution(object):
    def plusOne(self, digits):
        """
        :type digits: List[int]
        :rtype: List[int]
        """
        sum   = 0
        digit = 1
        for val in digits[::-1]:
            sum += val * digit
            digit *= 10

        return [int(x) for x in str(sum+1)]
        ### return list(map(int, str(sum+1)))

#==============================================================================

class Input:
    
    def __init__(self, num=0):
        
        if num == 1:
            self.digits = [1,2,3]
            self.ans    = [1,2,4]
        
        elif num == 2:
            self.digits = [4,3,2,1]
            self.ans    = [4,3,2,2]

        elif num == 3:
            self.digits = [9]
            self.ans    = [1,0]
        
        else:
            self.input  = 3

### Main ######################################################################

if __name__ == "__main__":

    solve()

###############################################################################