全排列问题,可以从动态规划状态方程考虑,也可以从回溯法考虑,二者代码递归形式的代码是一致的,但是理解的角度不同

动态规划:

# 基于动态规划,状态方程考虑,f[n] = 首位为所有元素 + f[n-1],这个动态规划没有重复
# 子问题,每一种情况都需要遍历
class Solution2:def permute(self, nums):""":type nums: List[int]:rtype: List[List[int]]"""result =[]end = len(nums)def permute_recursion(nums,start):# 递归的出口,就是只剩一个元素时if start == end-1:result.append(nums[:])# 把每一个元素放在首位,其他的做全排列for i in range(start,end):nums[i],nums[start] = nums[start],nums[i]permute_recursion(nums,start+1)nums[i],nums[start] = nums[start],nums[i]return resultreturn permute_recursion(nums,0)

回溯法,全排列的回溯法:

# 注意python复制数组注意使用切片
# 基于回溯法考虑
class Solution:def permute(self, nums):""":type nums: List[int]:rtype: List[List[int]]"""result =[]num = len(nums)def backtracking(depth,nums):if depth == num-1:result.append(nums[:])else:for i in range(depth,num):nums[i],nums[depth] = nums[depth],nums[i]backtracking(depth+1,nums)nums[i],nums[depth] = nums[depth],nums[i]return resultreturn backtracking(0,nums)

注意python复制数组注意使用切片,如果是复制数据,或者把数据加入到一个列表里,千万要使用切片,不要使用其名称,python里名称是指针,后续数据变化了,列表里面的数据也会变化。

动态规划,分治,回溯法,全排列,切片相关推荐

  1. java迷宫类编程题_第十届蓝桥杯省赛java类B组 试题 E:迷宫 (动态规划之回溯法)...

    问题描述 试题 E: 迷宫 [问题描述] 下图给出了一个迷宫的平面图,其中标记为 1 的为障碍,标记为 0 的为可 以通行的地方. 010000 000100 001001 110000 迷宫的入口为 ...

  2. 【Java -- 算法】分治算法、动态规划、回溯法、贪心算法

    前言 一句话理解四种算法思想 分治:分而治之,先解决子问题,再将子问题的解合并求出原问题. 贪心:一条路走到黑,选择当下局部最优的路线,没有后悔药. 回溯:一条路走到黑,手握后悔药,可以无数次重来.( ...

  3. 图形结构:遍历模型,分治法,动态规划,回溯法,BFS,DFS

    图形结构,是树形结构的扩展. 我们在回溯法里面了解到几种结构:二叉树,排列树,完全n叉树,这几种解空间类型,都可以直接使用回溯法的框架解决. 二叉树,排列树,完全n叉树,都可以看成x叉树的变形,而图形 ...

  4. 算法设计之—直接 遍历/穷举法、贪心算法、动态规划、回溯法、EM方法

    算法是对完成特定问题的程序执行序列描述,表象为从问题初始状态到问题结束状态的所有路径之中寻找可行路径,若无先验经验,根据执行方式不同可以划分为无规则和有规则(启发式)方法. 无规则方法为穷举,改进方法 ...

  5. 五大常用算法——分治法,动态规划,回溯法,分支界限法,贪心算法

    (1) 分治法 将一个难以直接解决的大问题,分割成一些规模较小的相同问题 快速排序 快排也是分治的一个实例,快排每一趟会选定一个数,将比这个数小的放左面,比这个数大的放右面, 然后递归分治求解两个子区 ...

  6. 动态规划和回溯法的异同

    一:举例 回溯法典型的题目有:八皇后问题,老鼠走迷宫问题.(老鼠问题) 动态规划典型题目有:最长公共子序列问题,还有滑雪路径问题(滑雪路径) 这些都是我做过的几道题,对两种算法有点感悟,所以写出自己的 ...

  7. 回溯法解决tsp问题 matlab,回溯法求解tsp问题

    回溯法以这种工作方式递归地在解空间中搜索, 直至找到所 要求的解或解 空间中已无活结点时为止. 回溯法求解 TSP 问题,首先把所有的顶点的访问标志初始化为 0,...... 回溯法求解 TSP 问题 ...

  8. DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台、刷题集合、问题为导向的十大类刷题算法(数组和字符串、栈和队列、二叉树、堆实现、图、哈希表、排序和搜索、动态规划/回溯法/递归/贪心/分治)总

    DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台.刷题集合.问题为导向的十大类刷题算法(数组和字符串.栈和队列.二叉树.堆实现.图.哈希表.排序和搜索.动态规划/回溯法/递归/贪心/分治)总 ...

  9. 计算机算法设计与分析(第五版)---王晓冬--------前六章(递归与分治,动态规划,贪心算法,回溯法,)期末复习资料总结

    --1--  算法:解决问题的一种方法或者一个求解过程 是若干指令的序列 输入 输出 有限性 确定性 程序:用某种设计语言对算法的具体实现 可以不满足 有限性 程序 = 算法+数据结构 果子合并问题( ...

最新文章

  1. dz mysql日志清理_Discuz教程:如何准确的清理数据库
  2. html抽取正文内容 c++,如何用C/C++获取html或shtml文件的内容?
  3. java怎么从大到小排序元祖_列表、元祖的操作
  4. mysql 5.7 创建用户_MySQL 5.7 创建用户并授权
  5. excel乘法公式怎么输入_精选43个Excel表格的操作技巧| 推荐收藏
  6. 社交柔道术 - 《影响力》读书笔记(一)
  7. 【Kali】kali主要工具使用说明(文末附超全思维导图)
  8. yaml数组解析_Java使用snakeyaml解析yaml
  9. 办公室计算机网络使用情况,办公室中有多台电脑上网需求的解决方法
  10. 计算机中mac地址是什么意思,mac地址在计算机什么上
  11. 各国程序员薪资水平,看完我想静静。。。
  12. ios 根据日期知道周几_iOS-通过日期计算是周几
  13. React className的写法
  14. 浅谈RESTful风格
  15. OUTER JOIN的应用场景
  16. CIM技术,构建数字孪生的智慧城市
  17. 恢复文件默认打开方式
  18. 阿里云网站备案申请被驳回的问题解答汇总
  19. 2022秋招前端面试题(五)(附答案)
  20. Ubuntu 编译jdk源码

热门文章

  1. linux下截取安卓手机屏幕,截取屏幕截图
  2. linux下camera驱动分析_《Linux设备驱动程序》(五)——字符设备驱动(下)
  3. java file类详解_Java File类详解及IO介绍及使用
  4. go uint64 转 字符_Go的基本数据类型入门看这一篇就差不多了
  5. ipa文件怎么安装到iphone_无视签名随意安装 IPA 文件
  6. 学php好不,怎么学好php
  7. Caused by: org.springframework.amqp.AmqpException: No method found for class [B
  8. MySQL 查看执行计划
  9. Servlet获取URL地址
  10. css 定位连线_CSS Position(定位)