从第一位开始依次确定每一位的数字,当确定到 k 位时就分别将第 k 位及之后的数字放到第 k 位,然后按同样的方法继续确定下一位,直到最后一位被确定。

应用回溯的处理思想枚举所有的可能的排列方式。

直接上代码

public class Main {public static void main(String[] args) {int[] arr = new int[]{1, 2, 3, 4};fun(arr, 0);}private static void fun(int[] arr, int k) {if (k == arr.length) {  //此时的 arr 就是一种排列方式print(arr);return;}// 确定第 k 位,循环将第 k 位后面的数字放在第 k 位for (int i = k; i < arr.length; i++) {// 将第 k 位后的第 i 位与其交换int t = arr[i];arr[i] = arr[k];arr[k] = t;// 继续确定第 k+1 位fun(arr, k + 1);// (回溯)将第 k 位复原t = arr[i];arr[i] = arr[k];arr[k] = t;}}private static void print(int[] arr) {for (int i = 0; i < arr.length; i++) {System.out.print(arr[i]);}System.out.println();}
}

运次此段代码可以得到序列 {1,2,3,4} 的全排列。
运行结果

1234
1243
1324
1342
1432
1423
2134
2143
2314
2341
2431
2413
3214
3241
3124
3142
3412
3421
4231
4213
4321
4312
4132
4123Process finished with exit code 0

应用回溯算法求全排列相关推荐

  1. 【算法设计与分析】C++回溯法求全排列

    一.问题描述 设计一个算法求 1-n 的 n 个整数 中取出 m 个整数的全排列,要求在每个排列中每个整数只能取一次. 二.算法分析 直接使用深搜,个数满足了m就输出即可 #include<io ...

  2. 回溯算法:排列树(全排列)

    排列树理论: 排列树就是给你个序列,如123,得出他的全排列,如下 123: 132: 213: 231: 321: 312: 整个算法步骤画出来就是一个树形结构,需要我们深度遍历,层向思考.什么意思 ...

  3. Johnson-Trotter算法求全排列

    下面我将贴出Johnson-Trotter算法的JAVA代码 package JT;import java.util.Scanner;public class Johnson_Trotter {//求 ...

  4. sum 去重_总结leetcode上【排列问题】【组合问题】【子集问题】回溯算法去重的两种写法!...

    本周小结!(回溯算法系列三)续集 在 本周小结!(回溯算法系列三) 中一位录友对 整颗树的本层和同一节点的本层有疑问,也让我重新思考了一下,发现这里确实有问题,所以专门写一篇来纠正,感谢录友们的积极交 ...

  5. 蓝桥杯笔记:(给的元素不重复)求全排列(排列不可重复,排列可重复)

    1.各个元素不重复 abc,acb,....... 用next_permutataion()求全排列 #include<iostream> #include<algorithm> ...

  6. 「leetcode」最强回溯算法总结篇!历时21天、画了20张树形结构图、14道精选回溯题目精讲

    本文 https://github.com/youngyangyang04/leetcode-master 已经收录,里面还有leetcode刷题攻略.各个类型经典题目刷题顺序.思维导图,可以fork ...

  7. 算法整理八——回溯算法

    目录 一.概述 二.素数环问题 三.n个数中取出任意r个数进行排列 四.整数划分问题/自然数拆分(递归方法也可以实现,见递归部分) 五.装载问题(最大装载量) 六.0-1背包问题 七.n皇后问题 八. ...

  8. [学习记录]回溯算法及其应用

    目录 一.简介 二.回溯算法的应用 三.回溯算法的模板 四.回溯算法解决子集问题 (一)子集问题描述 (二)问题解决 (三)代码实现 (四)剪枝操作 五.回溯算法解决分割问题 一.简介 回溯与递归是相 ...

  9. 回溯算法-01遍历所有排列方式问题

    遍历所有排列方式 前言 回溯采用试错的方法解决问题,一旦发现当前步骤失败,回溯算法就返回上一个步骤,继续另一种方案继续试错. 回溯算法的优点是速度快,没有尝试所有路径就可能找到答案.当然,如果运气不好 ...

最新文章

  1. java中有关覆写的总结
  2. 蒙特卡洛树搜索_蒙特卡洛树是什么算法?
  3. eclipse 配置黑色主题
  4. webpack 工作方式
  5. SQLServer------聚集索引和非聚集索引的区别
  6. android getwindow 在fragment不能使用,Android Fragment 布局使用 fitsSystemWindows = true 无效解决方案...
  7. Tomcat+nginx+keepalived+memcached实现双VIP负载均衡及Session会话保持
  8. adf4350配置_配置MySQL以进行ADF开发
  9. 2016级算法第二次上机-F.ModricWang's Number Theory II
  10. 全国携号转网下月底实现 三大运营商狂推多种优惠套餐
  11. java 命令参数详解
  12. DISCUZ编辑器工具栏图标不显示
  13. 关于安卓(apk)unity3d游戏汉化简单做一些全面分析
  14. JetBrains Rider 软件使用快速入门
  15. php批量导入多个excel,php的excel数据批量导入
  16. 图像修复 python_用python进行图像修复与去除水印
  17. 探索嵌入式应用框架(EAF)
  18. 低功耗蓝牙搜索广播的实现流流程介绍 /BLE scan flow ----- 蓝牙低功耗协议栈
  19. J2EE疑难解决实例
  20. 【人事管理系统2.0 Linq to SQL】企业人事管理系统

热门文章

  1. exploit-db图文教程
  2. jQuery-三班倒日历
  3. 开始体验WinXp + VmWare Workstation + Fedora8
  4. 华为FPGA设计设计规范
  5. 企业网络安全保障团队建设构想
  6. bmp,jpg,png,tif,wmf,emf与eps图片格式转换
  7. 磁盘管理关于磁盘的概念
  8. mui 悬浮窗口实现
  9. 快手极速版——青龙羊毛
  10. 弘辽科技:拼多多再出“新招”