大致思路:
将一个大的全排列分成小的排列,直到元素为1个时,就结束排列
就是比如字符串:“ABC”每个元素当一次老大,最为一个大的排列
第一次A与自己交换A当老大
第二次A与B进行交换B当老大
第三次A与C进行交换C当老大
从图中可以看出当我们交换一次之后,下一轮交换是从最初始的顺序进行交换,所以每次交换后就需要将我们的字符串进行一下还原

当第一轮每个都当一次老大后,就是每个老大剩下的元素再向下进行交换当老大,看图

最后的话,只剩一个就不能再往下划分排列,所以结束排列,得到排列结果

代码采用递归的形势所写,如下

package com.sj.分治回溯;import java.util.HashSet;//全排列
public class FullPermutation {public static void main(String[] args) {String s="ABC";HashSet<String> set=new HashSet<>();permutation(set,0,s.length()-1,s.toCharArray());//toCharArray(),就是将字符串转为字符数组System.out.println(set);}private static void permutation(HashSet<String> set, int from, int to, char[] arr) {//解决在数组arr中from到to之间的元素轮流当当前的老大 确定一个排列之后加入到set中if(from==to) {set.add(new String(arr));}else {for(int i=from;i<=to;i++) {swap(arr,i,from);//分治的第二次排列permutation(set,from+1,to,arr);//对字符串进行还原操作,以便后续排列swap(arr,i,from);}}}private static void swap(char[] arr, int i, int from) {char temp=arr[i];arr[i]=arr[from];arr[from]=temp;}
}

分治回溯-分治的应用-全排列问题相关推荐

  1. 数据结构与算法学习④(哈夫曼树 图 分治回溯和递归)

    数据结构与算法学习④(哈夫曼树 图 回溯和递归 数据结构与算法学习④ 1.哈夫曼树 1.1.相关概念 1.2.哈夫曼树的构建 1.3.哈夫曼编码 1.4.面试题 2.图 2.1.图的相关概念 2.2. ...

  2. 分治回溯算法----八皇后问题

    八皇后问题:在一个8×8的棋盘中,放入8个皇后棋子,要求同行同列同斜线不能有重复的皇后棋子,八皇后问题一共有92种解法.如图所示:即八皇后问题的一个解. //分治回溯算法解决八皇后问题 public ...

  3. 点分治+CDQ分治+整体二分全纪录

    点分治 点分治讲解 解决树上路径问题 经典例题:点分治(长度小于m的路径计数) 经典例题:点分治(聪聪可可) 经典例题:点分治(多个定值路径计数) 经典例题:点分治(采药) 经典例题:点分治+ST表+ ...

  4. CDQ分治【分治(真得头疼)

    前言: 说实话我对于这种没有固定板子,变化多端的算法实在是非常头疼的 但是不学不行,这也是一种很重要的思伟方式 所以趁着这几天的心情比较好(快要放大周),赶紧学一波~ 鸣谢:tham,stdcall ...

  5. 动态规划从理论到实践-深入理解贪心/分治/回溯/动态规划的算法思想

    摘要:本文主要讲解常见的四种算法,分别为贪心算法:第一步选择最优的走法,算法不能做到全局最优:分治算法:一种处理问题的思想,使用递归来实现:回溯算法:我们枚举所有的解,找到满足期望的解,可以把求解过程 ...

  6. 算法思想之递归分治回溯

    参考文档 递归思想 思想 描述 递归 当需要重复地多次计算相同的问题,通常可以采用递归或循环.递归是在一个函数内部调用这个函数自身. 递归的本质是把一个问题分解成两个或多个小问题.(注:当多个小问题存 ...

  7. 二叉树的深度 | 分治 +回溯 + 迭代

    二叉树的最大深度 leetcode https://leetcode.cn/problems/maximum-depth-of-binary-tree/ 回溯基本思路 二叉树的最大深度就是 : 从根节 ...

  8. LeetCode刷题---递归回溯分治【2020第一版】

    # 诗经·秦风·无衣 岂曰无衣,与子同袍.王于兴师,修我戈矛.与子同仇. 岂曰无衣,与子同泽.王于兴师,修我矛戟.与子谐作. 岂曰无衣,与子同裳.王于兴师,修我甲兵.与子谐行. #把正确的时间拿来看看 ...

  9. bzoj1095: [ZJOI2007]Hide 捉迷藏 线段树维护括号序列 点分治 链分治

    这题真是十分难写啊 不管是点分治还是括号序列都有一堆细节.. 点分治:时空复杂度$O(n\log^2n)$,常数巨大 主要就是3个堆的初始状态 C堆:每个节点一个,为子树中的点到它父亲的距离的堆. B ...

  10. POJ1741 Tree(树分治——点分治)题解

    题意:给一棵树,问你最多能找到几个组合(u,v),使得两点距离不超过k. 思路:点分治,复杂度O(nlogn*logn).看了半天还是有点模糊. 显然,所有满足要求的组合,连接这两个点,他们必然经过他 ...

最新文章

  1. 【转】结合ashx来在DataGrid中显示从数据库中读出的图片
  2. register_chrdev_region源码理解
  3. 一图弄清滴答定时器寄存器 SysTick Registers
  4. 电脑遇到脱机状态怎么解除?
  5. 【RLchina第二讲】 Foundations of Reinforcement Learning
  6. qt设置背景图片变黑色_PS软件如何快速制作一个黑色创意海报
  7. pe安装linux 12.04,乌班图系统Ubuntu 12.04安装教程(图文详解)
  8. 谷歌地球尝试验证时检测到错误_验证码为何越来越难了?
  9. scanf 详解 - 你所不知道的scanf用法
  10. vsphere esxi原生下载方式
  11. php贴吧系统,PhpSay 开源贴吧系统 v2.1
  12. FASTA序列格式说明
  13. Ubuntu16.04编译roc-rk3328-cc
  14. 篱笆家装宝典之六——地板板材
  15. “希希敬敬对”队软件工程第九次作业-beta冲刺第二次随笔
  16. codevs[3145]汉诺塔游戏
  17. 安装冒险岛出现计算机丢失文件夹,冒险岛老更新失败?
  18. 什么是POP3、SMTP及IMAP?POP3与IMAP的区别
  19. scp传文件 文件名有空格解决方法
  20. 2台window电脑如何传输文件

热门文章

  1. 机器学习7-主成分分析
  2. 海量高维数据与纬度约减
  3. 简单类型视图状态应用
  4. 6.2GPT意境级讲解
  5. 伪标记是一种简单的半监督学习方法
  6. byte 类型_Go 语言string 也是引用类型
  7. 蓝桥杯2015年第六届C/C++A组国赛第四题-穿越雷区
  8. 蓝桥杯2019年第十届C/C++省赛B组第一题-组队
  9. Vue 中使用element ui 自定义邮箱和手机号的效验规则
  10. Eclipse(ADT)找不到android.support.v4.view.ViewPager,2步搞定!