之前面试的时候,面试官问我的一个题目,
问:一个人在w*h的地图上走,每次走一步,先向左走到头,然后向下走,然后向上走,然后向左走,不能重复,求n步所在的位置
如下:
它会依次输出1-64,
function rectTurn(w,h,x,y,dre) { var x=0;y=0; var r=w var b=h var l=-1 var t=-1 var dre=dre||{ x:1,y:0 } var cache=[] function run(n){ cache.push(x+y*w) x+=dre.x y+=dre.y //往右走不符合 if(x>=r){ x=x-1//还原 y=y+1 dre.x=0 dre.y=1 t=t+1 } //向下走不符合 if(y>=b){ x=x-1 y=y-1 dre.x=-1 dre.y=0 r=r-1 } //向左走不符合 if(x<=l){ x=x+1 y=y-1 dre.x=0 dre.y=-1 b=b-1 } //向上走不符合 if(y<=t){ x=x+1 y=y+1 dre.x=1 dre.y=0 l=l+1 } if(x>=r){ console.log("end") return; } if(n==1){ return; } return run(n-1) } return function (n) { run(n); return cache; } } const run=rectTurn(8,8,0,0) console.log(run(64))