Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Python】配列で表された大きな数に1を加算する方法(Plus One問題)

整数の配列 A があるとします。A は n 個の非負の整数を要素として持ち、配列全体で1つの大きな数を表しています。例えば、A = [5, 3, 2, 4] が与えられた場合、これは数値 5324 を意味します。この配列 A を受け取り、その数に 1 を加算した結果を、同じく配列形式で返す必要があります。つまり、加算後の A は [5, 3, 2, 5] となるわけです。

解決のための手順

この問題は、以下の手順で解くことができます。

  • 配列の各要素を文字列に変換しながら連結し、1つの文字列を作成する
  • その文字列を整数型に変換し、1 を加算する
  • 加算結果を桁ごとに分割し、新しい配列として組み立てて返す

それでは、実際の実装例を見てみましょう。

Pythonでの実装例

class Solution(object):
    def plusOne(self, digits):
        """
        :type digits: List[int]
        :rtype: List[int]
        """
        num = ""
        for i in digits:
            num += str(i)
        num = int(num)
        num += 1
        num = str(num)
        ans = []
        for i in num:
            ans.append(int(i))
        return ans

digits = [5,3,2,4]
ob1 = Solution()
print(ob1.plusOne(digits))

入力

digits = [5,3,2,4]

出力

[5,3,2,5]

補足:桁上がり(繰り上げ)について

上記の実装は、文字列と整数の相互変換を活用したシンプルなアプローチです。Python の int 型は任意精度整数(多倍長整数)をサポートしているため、桁数が非常に大きい数でもオーバーフローを気にせず処理できます。

一方、C++ や Java など固定長の整数型しか持たない言語では、この方法ではオーバーフローが発生する可能性があります。そのような場合は、配列の末尾(最下位の桁)から順に走査し、要素が 9 であれば 0 に置き換えて繰り上げを次の桁へ渡し、9 以外であれば 1 を足して処理を終了する、というキャリー(繰り上げ)方式が一般的です。すべての桁が 9 だった場合のみ、先頭に 1 を追加した新しい配列を返します。

  1. PythonとRuby、どちらを選ぶべき?特徴・用途・コミュニティを徹底比較

    まず頭に浮かぶのは、「なぜこの2つの言語だけを比較するのか?」という疑問でしょう。その理由は、両者ともインタプリタ型のアジャイルな言語であり、オブジェクト指向の思想を持ち、非常に大きなコミュニティに支えられているからです。しかし、両言語は一部のアイデアや構文要素を共有し、ほぼ同じ機能を持っているにもかかわらず、それぞれのコミュニティには共通点がほとんどありません。どちらの言語も開発者コミュニティで非常に人気があります(これも比較される理由の一つです)。以下は、2018年にGitHub上でオープンされたプルリクエスト数に基づく、最も人気のあるトップ10言語です。GitHubのプルリクエスト数に基

  2. 配列を1つずつ時計回りに循環回転させるPythonプログラム

    ユーザーが入力した配列を受け取り、その要素全体を時計回りに1つずつ循環的に回転させるのが本記事の目的です。最後尾の要素が先頭に移動し、それ以外の要素はそれぞれ後ろへ1つずつシフトされます。 実行例 入力:A = [1, 2, 3, 4, 5] 出力:[5, 1, 2, 3, 4] この例では、末尾の「5」が先頭に移動し、「1〜4」はそれぞれ1つ後ろへずれています。 アルゴリズムの手順 ステップ1:配列の要素を入力する。 ステップ2:配列の最後の要素を変数 x に保存する。 ステップ3:すべての要素を1つ後ろの位置へシフトする。 ステップ4:配列の先頭要素を x で置き換える。 ポイント