You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

二维数组反对角线Java代码内层循环功能解析

二维数组提取反对角线内层循环详解

先还原符合要求的典型实现代码(你提到的仅用二维数组的版本):

public class AntiDiagonalExtractor {
    public static int[][] extractAntiDiagonals(int[][] matrix) {
        int rowCount = matrix.length;
        int colCount = matrix[0].length;
        // 反对角线总数 = 行数 + 列数 - 1
        int[][] result = new int[rowCount + colCount - 1][];

        // 外层循环遍历每条反对角线,用sum = i+j标识
        for (int sum = 0; sum < rowCount + colCount - 1; sum++) {
            // 第一步:统计当前反对角线的元素个数
            int elemCount = 0;
            for (int i = 0; i < rowCount; i++) {
                int j = sum - i;
                if (j >= 0 && j < colCount) elemCount++;
            }
            // 初始化当前反对角线的数组长度
            result[sum] = new int[elemCount];

            // 你疑惑的内层循环:填充当前反对角线元素
            int fillIdx = 0;
            for (int i = 0; i < rowCount; i++) {
                int j = sum - i;
                if (j >= 0 && j < colCount) {
                    result[sum][fillIdx++] = matrix[i][j];
                }
            }
        }
        return result;
    }
}

内层循环的核心作用

这个内层循环的唯一目标就是把当前反对角线上的所有元素精准找出来,塞进结果数组的对应位置,拆解细节:

1. 反对角线的核心特征

原数组里的每个元素matrix[i][j],都属于一条i + j = sum的反对角线——sum就是外层循环的变量,从0开始逐个遍历每条线。比如:

  • sum=0 → 只有i=0,j=0(元素1)
  • sum=1 → i=0,j=1(2)、i=1,j=0(4)
  • sum=2 → i=0,j=2(3)、i=1,j=1(5)、i=2,j=0(7)

2. 内层循环的执行逻辑

  • 用i遍历原数组的每一行(从0到最后一行)
  • 通过j = sum - i反推列索引:因为要满足i+j=sum,所以j必须等于sum减当前行号
  • 合法性检查j >=0 && j < colCount:避免算出的列索引超出原数组范围(比如sum=1时,i=2的话j=1-2=-1,直接跳过)
  • 一旦索引合法,就把matrix[i][j]放到result[sum]数组里,用fillIdx记录当前填充的位置,每放一个就自增1

3. 针对示例输入的实际跑一遍

拿sum=3(第四条反对角线)举例:

  • i=0 → j=3-0=3,超出原数组列数(0-2),跳过
  • i=1 → j=3-1=2,合法,存入matrix[1][2](6)
  • i=2 → j=3-2=1,合法,存入matrix[2][1](8)
    最终这条线的数组就是{6,8},和示例输出完全匹配。

为什么要分两次内层循环?

因为需求限定只能用二维数组,而二维数组的子数组长度必须提前确定。所以第一次内层循环先数清楚当前反对角线有多少个元素,用来初始化result[sum]的长度;第二次再用同样的索引逻辑填充元素——如果用ArrayList的话可以边遍历边加,不用先统计长度,但这里不能用。

内容的提问来源于stack exchange,提问作者Yousef Negmeldin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 22:30:49