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

C#实现Matrix Elements Sum:求上方无0的非0矩阵元素之和

嘿,我来帮你搞定这个问题!你的思路方向是对的——按列优先遍历确实是解决这个问题的好办法,核心就是要在每一列里跟踪「是否已经出现过0」,这样就能轻松判断当前元素是否符合「上方没有0」的条件了。

核心逻辑拆解

我们需要给每一列单独维护一个标记,用来记录这一列从顶部到当前位置是否已经出现过0:

  • 遍历每一列时,先把标记初始化为false(还没遇到0);
  • 从上到下遍历该列的每个元素:
    1. 如果标记已经是true,说明上方已经有0了,直接跳过当前元素;
    2. 如果当前元素是0,把标记设为true,后续元素都不用再考虑;
    3. 如果当前元素不为0且标记是false,就把它加到总和里。

代码示例(C#)

public static int CalculateValidSum(int[][] matrix)
{
    int total = 0;
    // 先处理空矩阵的边界情况
    if (matrix == null || matrix.Length == 0 || matrix[0].Length == 0)
        return total;

    int rowCount = matrix.Length;
    int colCount = matrix[0].Length;

    // 按列优先遍历
    for (int col = 0; col < colCount; col++)
    {
        bool hasZeroAbove = false;
        for (int row = 0; row < rowCount; row++)
        {
            int currentVal = matrix[row][col];
            
            if (hasZeroAbove)
                continue; // 上方已有0,直接跳过
            
            if (currentVal == 0)
            {
                hasZeroAbove = true; // 标记该列后续元素都无效
                continue;
            }
            
            // 满足条件,累加
            total += currentVal;
        }
    }
    return total;
}

举个例子验证

比如这个测试矩阵:

1  2  3
0  4  5
6  7  0

按照逻辑计算:

  • 第一列:1(有效,加)→ 遇到0,标记为true→ 6被跳过,贡献1;
  • 第二列:2(加)→4(加)→7(加),贡献13;
  • 第三列:3(加)→5(加)→遇到0,标记为true,贡献8;
    最终总和是1+13+8=22,完全符合要求。

这个逻辑简单直接,而且时间复杂度是O(row*col),效率拉满,你可以把这段代码放到你的项目里测试看看效果~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:26:29