字符串的排列
题目:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
思路:递归,回溯。
实现代码:
import java.util.*; public class Solution { public ArrayList<String> Permutation(String str) { ArrayList<String> ret = new ArrayList<String>(); if(str == null || str.length() <= 0) return ret; dfs(str.toCharArray(), 0, ret); Collections.sort(ret); return ret; } public void dfs(char[] chs, int i, ArrayList<String> ret) { if(i == chs.length - 1) { ret.add(String.valueOf(chs)); } else { for(int j=i; j<chs.length; j++) { if(i == j || chs[i] != chs[j]) { swap(chs, i, j); dfs(chs, i+1, ret); swap(chs, i, j); } } } } public void swap(char[] chs, int i, int j) { char ch = chs[i]; chs[i] = chs[j]; chs[j] = ch; } }
作者:Pickle
声明:对于转载分享我是没有意见的,出于对博客园社区和作者的尊重一定要保留原文地址哈。
致读者:坚持写博客不容易,写高质量博客更难,我也在不断的学习和进步,希望和所有同路人一道用技术来改变生活。觉得有点用就点个赞哈。
![](https://images2015.cnblogs.com/blog/735119/201701/735119-20170111112835275-168981902.gif)
![](https://images2015.cnblogs.com/blog/735119/201701/735119-20170111112841431-2047172832.jpg)
![](https://images2015.cnblogs.com/blog/735119/201701/735119-20170111112847494-1544911856.jpg)
![](https://images2015.cnblogs.com/blog/735119/201701/735119-20170111112904385-918783221.jpg)
![](https://images2015.cnblogs.com/blog/735119/201701/735119-20170111120143119-1302805212.jpg)
![](https://images2015.cnblogs.com/blog/735119/201701/735119-20170111112856369-1466718103.jpg)
![](https://images2015.cnblogs.com/blog/735119/201701/735119-20170111112830416-794416355.jpg)
![](https://images2015.cnblogs.com/blog/735119/201701/735119-20170111113919510-1155220901.gif)