10步城市往返行走代码问题排查:为何无法回到起点?
代码错误排查:10步行走返回起点逻辑问题
需求说明
按北(n)、南(s)、西(w)、东(e)四个方向行走,必须走满10步且最终返回起点,但测试时程序未正确判断是否回到起点,需排查代码问题。
待排查代码
function isValidWalk(walk) { let x = 0, y = 0; let result = 0; if(walk.length !== 10) { return false; } for (let i = 0; i < 10; i++) { if(walk[i] === 'n') { x += 1; } else if(walk[i] === 's') { x += -1 } else if(walk[i] === 'w') { y += -1; } else if(walk[i] === 'e') { y += 1; } } result = x + y; if(result === 0) { return true; } return false; }
错误分析
- 核心逻辑错误:判断是否回到起点的条件错误。你用
x + y === 0来判断,但回到起点需要x坐标和y坐标分别都为0(即原点(0,0)),而不是两者之和为0。 - 反例验证:比如行走序列为
['n','n','n','n','n','s','w','w','w','w'],此时x=5-1=4,y=-4,x+y=0,但实际位置在(4,-4),根本没回到起点,你的代码会错误返回true。
修正方案
把判断条件从result === 0改成x === 0 && y === 0,直接验证两个坐标是否都回到初始值0:
// 替换原有的判断逻辑 if(x === 0 && y === 0) { return true; } return false;
内容的提问来源于stack exchange,提问作者Andrey Smith
相关产品推荐
相关产品推荐

