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

Python实现104×68矩形36等分的坐标对应编号查询优化方案

优化解法:通过数学计算直接映射坐标到编号

要解决这个问题,最优雅且高效的方式是避免使用冗长的条件判断分支,而是通过数学计算直接将坐标映射到对应的小矩形编号。核心思路是先计算坐标所在的列和行索引,再通过索引推导编号,全程时间复杂度为O(1),完全没有循环或条件判断带来的性能损耗。

步骤分析

首先明确基础参数:

  • 大矩形尺寸:104×68
  • 小矩形总数:36 = 6列 × 6行
  • 单个小矩形的宽度:w = 104 / 6 ≈ 17.333
  • 单个小矩形的高度:h = 68 / 6 ≈ 11.333

根据题目编号规则:

  1. 列索引:x坐标从左到右划分,每列对应索引0-5(左起第一列为0)
  2. 行索引:y坐标从下到上划分,每行对应索引0-5(最下方行为0)
  3. 编号计算:编号 = 行索引 × 列数 + 列索引 + 1(因为编号从1开始)

Python实现代码

def get_rectangle_id(x: float, y: float) -> int:
    # 定义基础参数
    total_width = 104
    total_height = 68
    cols = 6
    rows = 6
    
    # 计算单个小矩形的精确宽高(避免用题目里的近似值,减少误差)
    cell_width = total_width / cols
    cell_height = total_height / rows
    
    # 计算列索引,处理x恰好等于大矩形宽度的边界情况
    col_idx = int(x // cell_width)
    col_idx = min(col_idx, cols - 1)
    
    # 计算行索引,处理y恰好等于大矩形高度的边界情况
    row_idx = int(y // cell_height)
    row_idx = min(row_idx, rows - 1)
    
    # 推导最终编号
    return row_idx * cols + col_idx + 1

验证示例

测试题目中的坐标(54, 35):

  • 列索引:54 // (104/6) ≈ 54 // 17.333 = 3
  • 行索引:35 // (68/6) ≈ 35 // 11.333 = 3
  • 编号:3*6 + 3 + 1 = 22,完全符合题目预期。

优化亮点

  1. 无分支判断:彻底告别一堆if-elif的写法,代码简洁易维护
  2. 精确计算:使用精确的小矩形宽高(而非题目里的近似值17.3/11.3),避免区间边界的判断误差
  3. 边界处理:通过min函数处理坐标恰好落在大矩形边缘的情况(比如x=104或y=68),确保索引不会超出范围
  4. 性能最优:数学计算直接得出结果,无论输入多少坐标,耗时都是恒定的

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 06:22:40