doocs/leetcode は、LeetCode や『世界で闘うプログラミング・インタービュー(原題: Cracking the Coding Interview)』などのアルゴリズム問題に対し、多様なプログラミング言語での解法を提供することを目的としたオープンソースプロジェクトです。このプロジェクトへの貢献は、自身のアルゴリズムスキルの向上だけでなく、コードレビューを通じた技術力の研鑽や、世界の開発者コミュニティへの寄与につながります。
1. 貢献のための事前準備
プロジェクトに参加する前に、以下の環境と準備を整えます。
- 開発環境の構築: Git および、解答に使用するプログラミング言語(Python, Java, C++, Go, TypeScript 等)の実行環境をインストールしてください。
- リポジトリの Fork: GitHub 上の doocs/leetcode ページにアクセスし、右上の「Fork」ボタンをクリックして自身の GitHub アカウントにリポジトリをコピーします。
- ローカルへのクローン: Fork した自身のリポジトリをローカル環境にダウンロードします。
git clone https://github.com/your-username/leetcode.git
cd leetcode
2. コントリビューションのワークフロー
標準的な Git フローに従って作業を進めます。
ステップ 1: 作業用ブランチの作成
メインブランチを最新の状態に保った後、新しい機能や修正のためのブランチを作成します。
git checkout -b feat/solution-problem-id
ステップ 2: 解法の作成
プロジェクトのディレクトリ構造に従ってファイルを追加します。通常、問題番号とタイトルに基づいたディレクトリが用意されています。例えば、LeetCode 第1題の Python 解法を追加する場合、以下のパスに配置します。
solution/0000-0099/0001.Two Sum/Solution.py
ステップ 3: 実装とテスト
コードは読みやすく、効率的である必要があります。以下は、ハッシュマップを用いた「Two Sum」の Python 実装例です。
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
# 値とインデックスを保持するハッシュマップ
val_to_idx = {}
for i, current_val in enumerate(nums):
complement = target - current_val
if complement in val_to_idx:
return [val_to_idx[complement], i]
val_to_idx[current_val] = i
return []
ステップ 4: コミットとプッシュ
変更をステージングし、明確なメッセージと共にコミットします。
git add .
git commit -m "feat: add Python solution for Problem 1"
git push origin feat/solution-problem-id
ステップ 5: Pull Request (PR) の作成
GitHub のリポジトリページで「Compare & pull request」ボタンをクリックし、変更内容を説明する PR を作成します。メンテナーによるレビューを経て、問題がなければメインリポジトリにマージされます。
3. 提出時のコーディング規約
- ファイル命名: `Solution.ext`(例: `Solution.cpp`, `Solution.java`)の形式を遵守してください。
- 品質保証: 提出するコードは、LeetCode 上ですべてのテストケースを通過している必要があります。
- ドキュメント: 解法ファイル内には、解法のロジック、時間計算量、空間計算量の分析を記述することが推奨されます。
- スタイル: 言語ごとの一般的な命名規則(PEP 8, Google Java Style Guide 等)に従ってください。
4. 視覚的な理解の促進
複雑なアルゴリズムの場合、図解を含めることで他の開発者の理解を助けることができます。プロジェクトでは、以下のような図を用いてロジックを説明することがあります。
5. FAQ
- どの問題を担当すべきか: Issue セクションで `help wanted` ラベルが付いているものや、まだ自分の得意な言語で解法が提供されていない問題を探してください。
- レビューの期間: 通常、1〜3 営業日以内にメンテナーからのフィードバックが行われます。
- 修正依頼が来た場合: 指摘事項に基づいてローカルで修正を行い、再度プッシュしてください。PR は自動的に更新されます。