アルゴリズム概要
入力 n に対し長さ 2^n の Gray Code
を生成します。隣接要素(末尾と先頭を含む)が常に1ビットだけ異なる巡回列です。
最短かつ実装容易な方法は、整数 i に対し
G(i) = i XOR (i>>1) を適用し、i=0..2^n-1
を一括生成する手法です。
ステップバイステップ解説
-
1
サイズ m を計算
m = 1 << n を計算し、結果リストの長さを決めます。
-
2
i を 0 から m-1 まで反復
range を用いて i を順に処理します。
-
3
Gray 値を計算
code = i XOR(i を 1 ビット右シフト)を計算します。
-
4
結果に追加し完了
code を結果リストに追加し、全 i が終われば完成です。
Play は 1 回のみ再生。最後に自動的に Step 1 に戻ります。
可視化(SVG)
各ステップの処理内容を日本語で表示しています。長い文は改行し、矩形サイズと viewBox を拡大してはみ出しを防止しています。
コード例(Python / LeetCode形式)
クラス形式・pylance適合の型注釈付き。行番号とコピーに対応しています。
from __future__ import annotations
from typing import List
class Solution:
"""
Gray Code generator
LeetCode提出想定 (Python 3.11+, pylance対応)
"""
def grayCode(self, n: int) -> List[int]:
"""
Args:
n (int): bit length (1 <= n <= 16)
Returns:
List[int]: Gray code sequence starting from 0
Complexity:
Time: O(2^n)
Space: O(2^n)
"""
m: int = 1 << n
# 内包表記で高速構築。各 i に対し i ^ (i >> 1) を計算。
result: List[int] = [(i ^ (i >> 1)) for i in range(m)]
return result
視覚的図解・フローチャート(SVG)
開始 → サイズ計算 → ループ → Gray 値計算 → 追加 → 完了の流れを日本語で示しています。長い文は改行し、矩形と viewBox を拡大してはみ出しを防止しています。
Start → size 計算 → ループ → Gray 値計算 → 追加 → 完了の流れを示します。
計算量
- Time: O(2^n)
- Space: O(2^n)(出力リスト)。追加領域は O(1)。