当前位置: 首页 > news >正文

商务网站建设工程师国家拨款农村建设查询的网站

商务网站建设工程师,国家拨款农村建设查询的网站,网站建设推广代理公司,浙江嘉兴建设局网站回溯法实现数组全排列的算法 Ⅰ、回溯法实现数组全排列#xff1a;1、题目描述#xff1a;2、解题思路#xff1a;3、实现代码#xff1a; Ⅱ、小结#xff1a; Ⅰ、回溯法实现数组全排列#xff1a; 1、题目描述#xff1a; 给定⼀个 没有重复 数字的序列#xff0c;… 回溯法实现数组全排列的算法 Ⅰ、回溯法实现数组全排列1、题目描述2、解题思路3、实现代码 Ⅱ、小结 Ⅰ、回溯法实现数组全排列 1、题目描述 给定⼀个 没有重复 数字的序列返回其所有可能的全排列。 示例: 输⼊: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 2、解题思路 以 [1,2,3] 为例根据回溯思想我们的逻辑是 先从 [1,2,3] 选取⼀个数。 然后继续从 [1,2,3] 选取⼀个数并且这个数不能是已经选取过的数。 重复这个过程直到选取的数字个数达到了 3。 可能存在的问题 其一、如何确保这个数不能是已经选取过的数 答我们可以直接在已经选取的数字中线性查找也可以将已经选取的数字中放到 hashset 中这样就可以在 O(1)的时间来判断是否已经被选取了只不过需要额外的空间; 3、实现代码 其一、代码为 // 此时的 list 是空数组、tempList 是空数组、nums 是没有重复数字的数组; const backtrack (list, tempList, nums) {if (tempList.length nums.length) return list.push([...tempList])for (let i 0; i nums.length; i) {// 此时 continue 的作用若 if() 满足条件则会跳出本次的 for 循环;if (tempList.includes(nums[i])) continuetempList.push(nums[i])backtrack(list, tempList, nums)tempList.pop()} }const permute (nums) {const list []backtrack(list, [], nums)return list }// 此时的输出结果为[ [ 1, 2, 3 ], [ 1, 3, 2 ], [ 2, 1, 3 ], [ 2, 3, 1 ], [ 3, 1, 2 ], [ 3, 2, 1 ] ]; permute([1, 2, 3]) 执行 backtrack(list, [], nums) 函数后代码执行的过程(即执行 backtrack([], [], [1,2,3]) 函数)注意里面涉及多个循环嵌套递归每次递归的出口为 tempList.length nums.length循环的出口为 for() 循环结束;第一层循环在 i0 的情况下if (tempList.includes(nums[i])) continue 的判断不成功;执行 tempList.push(nums[0]) 代码后tempList 数组为 [1];backtrack(list, tempList, nums) 执行代码为backtrack([], [1], [1,2,3])第二层循环在 i0 的情况下if (tempList.includes(nums[i])) continue 的判断成功因此直接跳出此次的 for() 循环的过程;第二层循环在 i1 的情况下if (tempList.includes(nums[i])) continue 的判断不成功;执行 tempList.push(nums[1]) 代码后tempList 数组为 [1,2];backtrack(list, tempList, nums) 执行代码为backtrack([], [1,2], [1,2,3])第三层循环在 i0 的情况下if (tempList.includes(nums[i])) continue 的判断成功因此直接跳出此次的 for() 循环的过程;第三层循环在 i1 的情况下if (tempList.includes(nums[i])) continue 的判断成功因此直接跳出此次的 for() 循环的过程;第三层循环在 i2 的情况下if (tempList.includes(nums[i])) continue 的判断不成功;执行 tempList.push(nums[2]) 代码后tempList 数组为 [1,2,3];backtrack(list, tempList, nums) 执行代码为backtrack([], [1,2,3], [1,2,3])if (tempList.length nums.length) return list.push([...tempList])list 的数组为[[1,2,3]];执行 tempList.pop() 代码后tempList 数组为 [1,2];执行 tempList.pop() 代码后tempList 数组为 [1];第二层循环在 i2 的情况下if (tempList.includes(nums[i])) continue 的判断不成功;执行 tempList.push(nums[2]) 代码后tempList 数组为 [1,3];backtrack(list, tempList, nums) 执行代码为backtrack([[1,2,3]], [1,3], [1,2,3])第三层循环在 i0 的情况下if (tempList.includes(nums[i])) continue 的判断成功因此直接跳出此次的 for() 循环的过程;第三层循环在 i1 的情况下if (tempList.includes(nums[i])) continue 的判断不成功;执行 tempList.push(nums[1]) 代码后tempList 数组为 [1,3,2];backtrack(list, tempList, nums) 执行代码为backtrack([[1,2,3]], [1,3,2], [1,2,3])if (tempList.length nums.length) return list.push([...tempList])list 的数组为[[1,2,3],[1,3,2]];执行 tempList.pop() 代码后tempList 数组为 [1,3];第三层循环在 i2 的情况下if (tempList.includes(nums[i])) continue 的判断成功因此直接跳出此次的 for() 循环的过程; 执行 tempList.pop() 代码后tempList 数组为 [1];执行 tempList.pop() 代码后tempList 数组为 [];第一层循环在 i1 的情况下if (tempList.includes(nums[i])) continue 的判断不成功;执行 tempList.push(nums[1]) 代码后tempList 数组为 [2];backtrack(list, tempList, nums) 执行代码为backtrack([[1,2,3],[1,3,2]], [2], [1,2,3])第二层循环在 i0 的情况下if (tempList.includes(nums[i])) continue 的判断不成功;执行 tempList.push(nums[0]) 代码后tempList 数组为 [2,1];backtrack(list, tempList, nums) 执行代码为backtrack([[1,2,3],[1,3,2]], [2,1], [1,2,3])第三层循环在 i0 的情况下if (tempList.includes(nums[i])) continue 的判断成功因此直接跳出此次的 for() 循环的过程;第三层循环在 i1 的情况下if (tempList.includes(nums[i])) continue 的判断成功因此直接跳出此次的 for() 循环的过程;第三层循环在 i2 的情况下if (tempList.includes(nums[i])) continue 的判断不成功;执行 tempList.push(nums[2]) 代码后tempList 数组为 [2,1,3];backtrack(list, tempList, nums) 执行代码为backtrack([[1,2,3],[1,3,2]], [2,1,3], [1,2,3])if (tempList.length nums.length) return list.push([...tempList])list 的数组为[[1,2,3],[1,3,2],[2,1,3]];执行 tempList.pop() 代码后tempList 数组为 [2,1];执行 tempList.pop() 代码后tempList 数组为 [2];第二层循环在 i1 的情况下if (tempList.includes(nums[i])) continue 的判断成功因此直接跳出此次的 for() 循环的过程;第二层循环在 i2 的情况下if (tempList.includes(nums[i])) continue 的判断不成功;执行 tempList.push(nums[2]) 代码后tempList 数组为 [2,3];backtrack(list, tempList, nums) 执行代码为backtrack([[1,2,3],[1,3,2],[2,1,3]], [2,3], [1,2,3])第三层循环在 i0 的情况下if (tempList.includes(nums[i])) continue 的判断不成功;执行 tempList.push(nums[0]) 代码后tempList 数组为 [2,3,1];backtrack(list, tempList, nums) 执行代码为backtrack([[1,2,3],[1,3,2],[2,1,3]], [2,3,1], [1,2,3])if (tempList.length nums.length) return list.push([...tempList])list 的数组为[[1,2,3],[1,3,2],[2,1,3],[2,3,1]];执行 tempList.pop() 代码后tempList 数组为 [2,3];第三层循环在 i1 的情况下if (tempList.includes(nums[i])) continue 的判断成功因此直接跳出此次的 for() 循环的过程;第三层循环在 i2 的情况下if (tempList.includes(nums[i])) continue 的判断成功因此直接跳出此次的 for() 循环的过程; 执行 tempList.pop() 代码后tempList 数组为 [2];执行 tempList.pop() 代码后tempList 数组为 [];第一层循环在 i2 的情况下if (tempList.includes(nums[i])) continue 的判断不成功;执行 tempList.push(nums[2]) 代码后tempList 数组为 [3];backtrack(list, tempList, nums) 执行代码为backtrack([[1,2,3],[1,3,2],[2,1,3],[2,3,1]], [3], [1,2,3])第二层循环在 i0 的情况下if (tempList.includes(nums[i])) continue 的判断不成功;执行 tempList.push(nums[0]) 代码后tempList 数组为 [3,1];backtrack(list, tempList, nums) 执行代码为backtrack([[1,2,3],[1,3,2],[2,1,3],[2,3,1]], [3,1], [1,2,3])第三层循环在 i0 的情况下if (tempList.includes(nums[i])) continue 的判断成功因此直接跳出此次的 for() 循环的过程;第三层循环在 i1 的情况下if (tempList.includes(nums[i])) continue 的判断不成功;执行 tempList.push(nums[1]) 代码后tempList 数组为 [3,1,2];backtrack(list, tempList, nums) 执行代码为backtrack([[1,2,3],[1,3,2],[2,1,3],[2,3,1]], [3,1,2], [1,2,3])if (tempList.length nums.length) return list.push([...tempList])list 的数组为[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2]];执行 tempList.pop() 代码后tempList 数组为 [3,1];第三层循环在 i2 的情况下if (tempList.includes(nums[i])) continue 的判断成功因此直接跳出此次的 for() 循环的过程;执行 tempList.pop() 代码后tempList 数组为 [3];第二层循环在 i1 的情况下if (tempList.includes(nums[i])) continue 的判断不成功;执行 tempList.push(nums[1]) 代码后tempList 数组为 [3,2];backtrack(list, tempList, nums) 执行代码为backtrack([[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2]], [3,2], [1,2,3])第三层循环在 i0 的情况下if (tempList.includes(nums[i])) continue 的判断不成功;执行 tempList.push(nums[0]) 代码后tempList 数组为 [3,2,1];backtrack(list, tempList, nums) 执行代码为backtrack([[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2]], [3,2,1], [1,2,3])if (tempList.length nums.length) return list.push([...tempList])list 的数组为[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]];执行 tempList.pop() 代码后tempList 数组为 [3,2];第三层循环在 i1 的情况下if (tempList.includes(nums[i])) continue 的判断成功因此直接跳出此次的 for() 循环的过程;第三层循环在 i2 的情况下if (tempList.includes(nums[i])) continue 的判断成功因此直接跳出此次的 for() 循环的过程; 执行 tempList.pop() 代码后tempList 数组为 [3];第二层循环在 i2 的情况下if (tempList.includes(nums[i])) continue 的判断成功因此直接跳出此次的 for() 循环的过程;执行 tempList.pop() 代码后tempList 数组为 [];因此最后 list 的输出结果为[ [ 1, 2, 3 ], [ 1, 3, 2 ], [ 2, 1, 3 ], [ 2, 3, 1 ], [ 3, 1, 2 ], [ 3, 2, 1 ] ], 而 tempList 的输出结果为[]; 其二、截图为 Ⅱ、小结 其一、哪里有不对或不合适的地方还请大佬们多多指点和交流 其二、若有转发或引用本文章内容请注明本博客地址(直接点击下面 url 跳转) https://blog.csdn.net/weixin_43405300,创作不易且行且珍惜 其三、有兴趣的话可以多多关注这个专栏(Vue(Vue2Vue3)面试必备专栏)(直接点击下面 url 跳转)https://blog.csdn.net/weixin_43405300/category_11525646.html?spm1001.2014.3001.5482
http://www.zqtcl.cn/news/422174/

相关文章:

  • 驾校网站制作郑州手机网站建设多少钱
  • c2c网站建设策划书怎么看网站关键词密度
  • 网站在线支付方案网站建设 sam大叔排名三天上首页
  • 温岭新站seo网站免费进入窗口软件有哪些
  • 网站未备案什么意思网站 php .net
  • 网站开发第三方登录设计七牛图床 wordpress
  • 大连网站设计案例宁波品牌网站设计价格
  • 响应式表白网站源码黑龙江建设网电话
  • wordpress企业建站生产企业做网站的费用怎么做账
  • 天都城网站建设wordpress pluings
  • 惠州做网站的公司有哪些wordpress主动推送
  • jsp做的网站带数据库新手网站设计定价
  • 做网站公司需要什么条件不锈钢公司网站源码 网站建设 产品3级分类asp源码
  • 经营网站挣钱网络运维工程师证书怎么考
  • 厦门网站建设ui株洲企业网站制作
  • 创建个网站需要多少钱张家界seo优化方案
  • 深圳营销型网站建设公司哪家好熊岳网站怎么做
  • 邢台企业网站建设好么找公司做网站要注意什么问题
  • 做博客网站要怎么配置的服烟台app开发公司
  • 从化网站建设方案怎么注册公司名字
  • 网站建设需要哪些书籍免费做游戏网站
  • 杭州 网站定制做旅游网站宣传
  • 泉州市做网站优化建设地情网站的作用
  • 筑巢网络官方网站打开搜索引擎
  • 赣州做网站公司哪家好网站先做前端还是后台
  • wordpress关闭网站吗用织梦做的学校网站
  • 响应式网站建设平台东莞网站建设aj
  • 代码做网站的软件市场营销策划书
  • 东莞网站建设 手机壳文登建设局网站
  • 网站建设和后台空间管理关系企业网络需求分析