1. 概述
在本教程中,我们将学习如何斜向遍历一个二维数组。该方法适用于任意尺寸的二维方阵(即行数和列数相等的数组)。
2. 二维数组结构
二维数组通过行索引和列索引来访问其中的元素。在本例中,我们通过如下示意图来理解如何获取每个元素:
从图中可以看出,二维数组的元素是按照对角线方向排列的。我们需要先确定数组中有多少条对角线(diagonal lines)。
对于一个 n x n
的二维数组来说:
int length = twoDArray.length;
int diagonalLines = (length + length) - 1; // 总共 diagonalLines 条对角线
int midPoint = (diagonalLines / 2) + 1; // 找到中间点,用于分段处理
✅ 举个例子:对于一个 3x3
的数组,总共有 5
条对角线,中点是 3
。
3. 获取行与列索引
我们通过一个循环来遍历每一条对角线:
for (int i = 1; i <= diagonalLines; i++) {
// 根据 i 的值判断当前对角线上的元素个数
}
3.1 每条对角线上的元素个数
定义一个变量 itemsInDiagonal
,表示当前对角线上元素的个数:
- 当
i <= midPoint
时,itemsInDiagonal
递增 - 否则递减
int itemsInDiagonal = 0;
if (i <= midPoint) {
itemsInDiagonal++;
} else {
itemsInDiagonal--;
}
3.2 遍历当前对角线上的所有元素
再嵌套一个内层循环,变量 j
从 0
到 itemsInDiagonal - 1
:
for (int j = 0; j < itemsInDiagonal; j++) {
int rowIndex;
int columnIndex;
if (i <= midPoint) {
rowIndex = (i - j) - 1;
columnIndex = j;
} else {
rowIndex = (length - 1) - j;
columnIndex = (i - length) + j;
}
// 访问数组元素:twoDArray[rowIndex][columnIndex]
}
3.3 示例说明
以如下 3x3 的数组为例:
char[][] twoDArray = {
{'a', 'b', 'c'},
{'d', 'e', 'f'},
{'g', 'h', 'i'}
};
遍历顺序为:
a
b d
c e g
f h
i
⚠️ 注意:这里的顺序是按对角线从左上到右下依次遍历。
4. 总结
我们通过计算对角线条数和中点,结合内外两层循环,实现了对二维数组的斜向遍历。核心在于:
- ✅ 理解对角线数量和中点的计算方式
- ✅ 掌握不同阶段(前半段/后半段)的索引计算逻辑
- ✅ 注意索引边界,避免越界异常
完整源码已托管在 GitHub:查看完整示例
如果你在实际项目中遇到类似需求(如图像处理、矩阵运算等),这套逻辑可以直接复用。