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

Hackerrank对角线差值问题:我的Python代码报错求排查

分析与解决方阵对角线和差值问题

咱们来一步步拆解你的代码问题,找到问题根源并给出解决方案:

第一次尝试代码的问题

你的第一段代码存在几个关键错误:

  • range(arr+1):arr是传入的二维数组,不能直接和整数1做加法运算,要获取方阵的阶数,应该用len(arr)(方阵的行数就是它的阶数n)。
  • 代码里用到了变量n,但这个变量在函数内完全没有定义,运行时会直接抛出NameError。
  • 其实没必要额外定义i和j,循环变量x本身就可以用来做索引,能大幅简化代码逻辑。

第二次尝试代码的错误原因

你遇到的IndexError是右对角线的索引计算错误导致的:
当用len(arr)-x时,以3阶方阵为例,len(arr)=3:

  • 当x=0时,计算出的索引是3-0=3,但数组索引是从0开始的,最大有效索引是2,自然就超出范围了。
    正确的右对角线索引应该是len(arr)-1 -x,这样:
  • x=0 → 3-1-0=2(对应第一行最后一个元素,正确)
  • x=1 →3-1-1=1(对应第二行中间元素,正确)
  • x=2 →3-1-2=0(对应第三行第一个元素,正确)

修正后的代码

这里给你一个简洁且正确的版本:

def diagonalDifference(arr):
    left_sum = 0
    right_sum = 0
    n = len(arr)
    for x in range(n):
        left_sum += arr[x][x]  # 左对角线:行索引等于列索引
        right_sum += arr[x][n - 1 - x]  # 右对角线:列索引 = 阶数-1 - 行索引
    return abs(left_sum - right_sum)

逻辑说明

  • 左对角线的元素有个明显特点:行号和列号完全相同,所以直接用arr[x][x]累加即可。
  • 右对角线的元素则是列号 = 方阵阶数-1 - 行号,这样就能从右上角依次遍历到左下角。
  • 最后返回两个对角线和的绝对差值,就完成了需求。

用你给出的示例输入测试:

3
11 2 4
4 5 6
10 8 -12

左对角线和:11+5+(-12)=4;右对角线和:4+5+10=19;绝对差值|4-19|=15,和示例输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:18:30