一般的な2次元配列パターン
CoddyのJavaジャーニー「ロジックとフロー」セクションの一部 — レッスン 8/59。
2D 配列を扱う際に、特定のペターンが頻繁に現れます。これらのペターンを認識することで、問題をより効率的に解決できます。以下にいくつかの一般的なペターンを示します:
対角線走査
行インデックスが列インデックスと等しい要素にアクセスすると(matrix[i][i])、主対角線が得られます。反対角線の場合、行と列のインデックスの合計が配列のサイズから 1 を引いた値と等しくなります(matrix[i][size - 1 - i])。
例えば:
1 2 3
4 5 6
7 8 9主対角線(matrix[i][i])を走査: 1, 5, 9
副対角線(matrix[i][size - 1 - i])を走査: 3, 5, 7
境界走査
境界要素を走査するには、一方のインデックスを一定(0 または size - 1)に保ちながら、もう一方をイテレートします。
上部の境界にアクセスするには、行インデックスを 0 に固定して列をイテレートします。
例えば:
1 2 3 4
5 6 7 8
9 10 11 12境界要素: 1, 2, 3, 4, 8, 12, 11, 10, 9, 5 (6 と 7 を除くすべて)
チャレンジ
簡単printPatterns という名前のメソッドを作成してください。このメソッドは、正方形の 2 次元整数配列(matrix)を入力として受け取り、以下の patterns を出力します:
- 主対角線:行インデックスが列インデックスと等しいすべての要素を出力します。
- 副対角線:行インデックスと列インデックスの和がマトリックスのサイズ - 1 に等しいすべての要素を出力します。
- 境界:マトリックスの上部、下部、左部、右部の境界の要素を出力します。
出力はこのようになります:
Main Diagonal: 1 6 11 16
Anti-Diagonal: 4 7 10 13
Top Border: 1 2 3 4
Bottom Border: 13 14 15 16
Left Border: 1 5 9 13
Right Border: 4 8 12 16チートシート
一般的な 2D 配列の走査パターン:
対角線走査
主対角線: matrix[i][i] (row index equals column index)
副対角線: matrix[i][size - 1 - i] (sum of row and column indices equals size - 1)
1 2 3
4 5 6
7 8 9主対角線: 1, 5, 9
副対角線: 3, 5, 7
境界走査
一方のインデックスを一定 (0 または size - 1) に保ちつつ、他方をイテレート:
- 上境界: row = 0, iterate columns
- 下境界: row = size - 1, iterate columns
- 左境界: column = 0, iterate rows
- 右境界: column = size - 1, iterate rows
自分で試してみよう
// クラス内にのみコードを書いてください。main() やこのクラス外のコードは書かないでください。
class PrintPatterns {
public static void printPatterns(int[][] matrix) {
// ここにコードを書いてください
}
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。