所有路径[回溯]

基于给出的方格找出所有的坐标点数组,这两个都类似于全排列,思想是先划定边界

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));


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值