基于给出的方格找出所有的坐标点数组,这两个都类似于全排列,思想是先划定边界
function name(s, e) {
let txA = [], tyA = []
for (let q = 1; q <= e; q++) {
txA.push([q, 1])
}
for (let p = s; p >= 1; p--) {
tyA.push([s, p])
}
let temp = []
function f(p) {
const tx = p[p.length - 1][0]
const ty = p[p.length - 1][1]
if (ty === 1) {
temp.push(p.concat(txA.slice(tx)))
return
}
if (tx === e) {
temp.push(p.concat(tyA.slice(s - ty + 1)))
return
}
f(p.concat([[tx + 1, ty]]))
f(p.concat([[tx, ty - 1]]))
}
f([[1, s]])
return temp
}
console.log(
name(10, 10));
时空复杂度反正都差的东西不能算作算法,只是一个思路罢了
function f(p) {
let temp = []
const tx = p[p.length - 1][0]
const ty = p[p.length - 1][1]
if (ty === 1) {
return [txA.slice(tx-1)]
}
if (tx === e) {
return [tyA.slice(s - ty)]
}
f([[tx + 1, ty]]).forEach(v => {
temp.push(p.concat(v))
});
f([[tx, ty - 1]]).forEach(v => {
temp.push(p.concat(v))
});
return temp
}
return f([[1, s]])
}
console.log( name(10, 10));