字符串全排列
来源:互联网 发布:什么是奥菲斯软件 编辑:程序博客网 时间:2024/05/31 04:03
题目描述:
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
解析:题目要求,按照字典顺序打印,而且输入的字符串中还可能有重复数字,因此考虑是用TreeSet这一数据结构。此题我解决全排列的问题使用的是递归的方式,大家也可以使用非递归的方式求解。非递归的具体实现可以参看这篇文章:非递归求解全排列
参考代码如下:
import java.util.ArrayList;import java.util.TreeSet;public class Main { public static ArrayList<String> Permutation(String str) { ArrayList<String> result = new ArrayList<String>(); TreeSet<String> set = new TreeSet<>();//用TreeSet保证去重和排序 char[] array = str.toCharArray(); int begin = 0; int end = array.length - 1; Permu(set, array, begin, end); for(String s : set){ result.add(s); } return result; } private static void Permu(TreeSet<String> set, char[] array, int begin, int end) { if(begin == end){//找到一个排列 set.add(new String(array)); return; }else{ for(int i = begin; i < array.length; i++){ swap(array, begin, i); Permu(set, array, begin + 1, end); swap(array, begin, i); } } } private static void swap(char[] array, int begin, int i) { char temp = array[begin]; array[begin] = array[i]; array[i] = temp; } public static void main(String[] args) { TreeNode root = null; String s = "abc"; System.out.println(Permutation(s)); }}
阅读全文
1 0
- 字符串的全排列
- 字符串的全排列
- 字符串全排列问题
- 字符串全排列
- 字符串全排列问题
- 字符串全排列
- 求字符串全排列
- 求字符串全排列
- 字符串的全排列
- 字符串全排列代码
- 字符串全排列
- 字符串全排列
- 字符串全排列
- 字符串的全排列
- 字符串全排列
- 求字符串全排列
- 字符串全排列
- 字符串的全排列
- MySQL索引原理及慢查询优化
- 在centos6.5系统下配置LAMP详解教程
- 【搜索入门专题1】hdu2717 H
- 弹出层效果
- SCU 4439 Vertex Cover (dfs +剪枝 一般图的点覆盖)
- 字符串全排列
- C++Primer Plus(第六版) 第十二章 第一题
- Javascript自定义错误,继承Error
- javascript的一道this综合题目
- css兼容总结
- PERL能为我做什么(1)
- Linux bash学习
- 浅谈http协议
- Android零基础入门第19节:Button使用详解