字符串的排列
2016-12-25 16:04
113 查看
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
先将原字符串按照字典序排列,直接用dfs实现全排列,然后去重
先将原字符串按照字典序排列,直接用dfs实现全排列,然后去重
import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Iterator; public class Solution { public ArrayList Permutation(String str) { ArrayList list = new ArrayList() ; if(str == null || str.length() == 0){ return list ; } char [] chs = str.toCharArray() ; char [] ans = new char[chs.length] ; boolean [] vis = new boolean[str.length()] ; Arrays.sort(chs); dfs(list , ans, chs , 0 , vis) ; Collections.sort(list); Iterator it = list.iterator() ; String pre = it.next() ; while(it.hasNext()){ String next = it.next() ; if(pre.equals(next)){ it.remove(); } pre = next ; } return list; } private void dfs(ArrayList list, char[] ans, char[] chs, int pos, boolean[] vis) { if(chs.length == pos){ list.add(String.copyValueOf(ans)) ; return ; } for(int i = 0;i < chs.length;i++){ if(vis[i])continue ; vis[i] = true ; ans[pos] = chs[i] ; dfs(list , ans , chs , pos+1 , vis) ; vis[i] = false ; } } }