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

已处理IndexOutOfRangeException,LeetCode提交仍报未处理运行时错误

问题排查与修复方案

嘿,我帮你找到了导致LeetCode运行时错误的核心原因!

问题根源

你的代码在处理边界值n=0时会直接触发数组越界异常,而且这个异常根本没被你的try-catch捕获:

  • 当n=0时,你创建的数组table长度是0+1=1,有效索引范围只有0;
  • 但你紧接着执行了table[1] = 1,这行代码不在try-catch块内,直接访问了超出数组范围的索引,导致未处理的IndexOutOfRangeException;
  • 你本地测试没发现问题,大概率是因为没覆盖n=0这个边界用例,而LeetCode的测试集必然包含该情况。

另外,你的try-catch其实完全没必要——靠捕获异常掩盖逻辑错误,既会影响性能,还会让真正的问题被隐藏。

修复方案

下面给你两种简洁可靠的修复方式,都是围绕先处理边界情况、确保数组访问安全展开:

方案1:先处理边界值(最直观)

根据斐波那契数列的定义,F(0)=0、F(1)=1,我们可以先把这两个情况直接返回,避免后续数组操作的风险:

public class Solution
{
    public int Fib(int n)
    {
        // 直接返回边界情况的结果
        if (n <= 1)
        {
            return n;
        }
        
        int[] table = new int[n + 1];
        table[1] = 1;

        // 循环到n-1即可,避免多余的迭代
        for (int i = 0; i < n - 1; i++)
        {
            table[i + 2] = table[i] + table[i + 1];
        }

        return table[n];
    }
}

方案2:严格控制数组访问范围

如果你不想提前处理边界,也可以调整循环条件,确保所有数组索引访问都在有效范围内:

public class Solution
{
    public int Fib(int n)
    {
        if (n == 0) return 0;
        int[] table = new int[n + 1];
        table[1] = 1;

        // 循环到i <= n-2,保证i+2最多等于n(数组的最大索引)
        for (int i = 0; i <= n - 2; i++)
        {
            table[i + 2] = table[i] + table[i + 1];
        }

        return table[n];
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:40:18