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

Pythonで数字のリスト形式の数値に1を加算する方法【サンプルコード付き】

問題の概要

ここでは、「nums」という名前の配列があるとします。この配列には、ある数値の各桁(10進数)が要素として格納されています。たとえば、[2, 5, 6] という配列は数値 256 を表します。この数値に 1 を加算し、結果を同じリスト形式で返すことが求められます。

たとえば、入力が nums = [2, 6, 9] の場合、269 に 1 を足した 270 を表す [2, 7, 0] が出力されます。

解決のアプローチ

この問題は、リストの末尾(最下位の桁)から順に処理していくことで解決できます。具体的な手順は以下の通りです。

  • 変数 i に「nums のサイズ − 1」を代入する(末尾のインデックス)。

  • i が 0 以上である間、次の処理を繰り返す。

  • もし nums[i] + 1 が 9 以下であれば:

    • nums[i] に 1 を加算する。

    • 繰り返しを抜けて終了する。

  • そうでなければ(その桁が 9 で繰り上がりが発生する場合):

    • nums[i] を 0 にする。

    • i を 1 減らして、一つ上の桁へ進む。

  • ループ終了後に i が 0 未満であれば、すべての桁が 9 だったことを意味するため、リストの先頭に 1 を挿入する。

  • nums を返す。

実装例

それでは、実際のコードを見てみましょう。

def solve(nums):
   i = len(nums) - 1
   while i >= 0:
      if nums[i] + 1 <= 9:
         nums[i] = nums[i] + 1
         break
      else:
         nums[i] = 0
         i -= 1
   if i < 0:
      nums.insert(0, 1)
   return nums

nums = [2, 6, 9]
print(solve(nums))

入力

[2, 6, 9]

出力

[2, 7, 0]

コードのポイント

このアルゴリズムの計算量は O(n)(n は桁数)です。最悪の場合でもリスト全体を一度だけ走査すればよいため、非常に効率的です。

また、すべての桁が 9 のケース(例:[9, 9, 9] に 1 を足して [1, 0, 0, 0] になる場合)にも対応できます。この場合はループが最後まで回りきって i が負になるため、先頭への挿入処理によって正しく繰り上がりが反映されます。

  1. Pythonで1つのリストを別のリストへ変換するのに必要なスワップ回数をカウントするプログラム

    問題の概要2つの数値リスト L1 と L2 があるとします。各リストの長さは n で、すべての値はリスト内で一意であり、値の範囲は 0 ~ n-1 です。このとき、L1 を L2 に変換するために必要な「隣接要素のスワップ(交換)」の最小回数を求めます。例えば、入力が L1 = [0, 1, 2, 3]、L2 = [2, 0, 1, 3] の場合、出力は 2 になります。まず 1 と 2 を入れ替えると L1 は [0, 2, 1, 3] になり、次に 0 と 2 を入れ替えると L1 は [2, 0, 1, 3] となり、L2 と一致するためです。解決のアプローチこの問題は、以下の手順で解く

  2. Pythonでリスト内の最小値を見つける方法を解説

    この記事では、リストの中から最小の数値を見つける方法について、具体的なサンプルコードとともに詳しく解説します。問題の概要問題: 数値のリストが与えられたとき、その中に含まれる最も小さい数値を画面に表示すること。この問題を解くアプローチは主に2つあります。ひとつは sort() メソッドを使ってリストを昇順に並べ替え、先頭の要素(インデックス0)を取得する方法。もうひとつは、Pythonに標準で用意されている組み込み関数 min() を使う方法です。それぞれ順番に見ていきましょう。方法1:sort()メソッドで並べ替えて最小値を取得するまずはリストを昇順にソートし、先頭の要素を取り出す方法です。