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

Python实现:判断正方形是否为Heterosquare的新手求助

别担心!我来一步步帮你搞定这个问题,用最直白的方法,保证新手也能看懂~

首先得明确核心定义:

**Heterosquare(异和正方形)**指的是一个n×n的正方形矩阵,要求所有行的和、所有列的和,以及两条对角线的加和,全部互不相同。只要有任意两个和重复,就不是heterosquare。

新手友好的解题思路

我们拆解成5个简单步骤,每一步都用基础Python语法实现:

  1. 先确认输入是正方形矩阵(每行长度等于矩阵行数),不是的话直接返回False
  2. 计算所有行的和
  3. 计算所有列的和
  4. 计算两条对角线的和
  5. 把所有和收集起来,检查有没有重复项

完整代码(带注释)

def is_heterosquare(matrix):
    # 步骤1:检查是否为正方形矩阵
    n = len(matrix)
    for row in matrix:
        if len(row) != n:
            return False  # 不是正方形直接返回False
    
    # 步骤2:计算所有行的和(一行一行求和,新手一眼就能懂)
    row_sums = [sum(row) for row in matrix]
    
    # 步骤3:计算所有列的和
    # zip(*matrix) 会把矩阵"转置"——把原来的列变成行,比如[[1,2],[3,4]]转成[(1,3),(2,4)]
    col_sums = [sum(col) for col in zip(*matrix)]
    
    # 步骤4:计算两条对角线的和
    # 主对角线:左上→右下,取matrix[i][i]
    diag1_sum = sum(matrix[i][i] for i in range(n))
    # 副对角线:右上→左下,取matrix[i][n-1-i]
    diag2_sum = sum(matrix[i][n-1 - i] for i in range(n))
    
    # 步骤5:收集所有和,检查是否有重复
    all_sums = row_sums + col_sums + [diag1_sum, diag2_sum]
    # 集合会自动去重,如果去重后的长度和原列表一致,说明没有重复
    return len(set(all_sums)) == len(all_sums)

测试案例(验证代码)

# 测试1:一个3阶heterosquare,所有和都不重复
test_hetero = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 9, 8]
]
print(is_heterosquare(test_hetero))  # 输出True

# 测试2:普通矩阵,行和与列和重复
test_not_hetero = [
    [1,1,1],
    [2,2,2],
    [3,3,3]
]
print(is_heterosquare(test_not_hetero))  # 输出False

关键细节解释

  • zip(*matrix):新手可能觉得陌生,简单说就是把矩阵的“列”转换成“行”,这样我们就能用和计算行和一样的方式算列和,不用写复杂的嵌套循环。
  • 用集合去重:这是最直观的检查重复的方法,比手动写循环比对简单太多,新手容易理解。
  • 先检查正方形:避免后续计算时因为矩阵形状不规范报错,是很实用的边界处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:31:21