TypeScript中10x10网格指定位置周边数字2的统计问题
问题排查与修正
你的countBombsNearBy函数存在两个核心问题,导致边缘位置统计不准确:
- 错误的条件嵌套:将当前位置的左侧(ML)、右侧(MR)判断包裹在了
rowIndex - 1 >= 0的条件中,当目标位置处于第一行(rowIndex=0)时,这两个方向的炸弹会被完全忽略。 - 逻辑结构冗余且不严谨:多层嵌套的条件判断容易遗漏部分方向的检查,尤其是边缘位置的合法相邻点。
修正后的函数代码
function countBombsNearBy(rowIndex: number, colIndex: number): number { let count = 0; // 定义所有8个相邻方向的偏移量 const directions = [ [-1, -1], [-1, 0], [-1, 1], [0, -1], [0, 1], [1, -1], [1, 0], [1, 1] ]; for (const [rowOffset, colOffset] of directions) { const newRow = rowIndex + rowOffset; const newCol = colIndex + colOffset; // 检查新位置是否在10x10网格范围内 if (newRow >= 0 && newRow <= 9 && newCol >= 0 && newCol <= 9) { if (grid[newRow][newCol] === 2) { count++; } } } return count; }
修正思路说明
- 统一枚举方向:用偏移量数组定义所有8个相邻方向,避免逐个判断的冗余和遗漏。
- 独立范围检查:对每个方向的新位置单独判断是否在网格边界内,确保边缘位置的每个合法相邻点都能被检查到。
- 逻辑清晰简洁:通过循环遍历所有方向,代码更易维护,彻底避免嵌套条件导致的逻辑漏洞。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

