题目:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串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; } }
原文:http://www.cnblogs.com/wxisme/p/5456918.html