public class Main {
// 字符串s, 进行全排列且不重复
public static String s = "AAAAB";
public static char[] chars = s.toCharArray(); // 原始的数组,保持不动
public static boolean isVisited[] = new boolean[s.length()]; // 判断是否被访问
public static void main(String[] args) {
char[] path = new char[chars.length];
dfs(path, 0);
}
private static void dfs(char[] path, int k) {
if (k == chars.length) {
System.out.println(new String(path));
return;
}
// 抓取法
for(int i=0;i<path.length;i++) {
if(i>0 && chars[i]==chars[i-1] && !isVisited[i - 1]) //现在将要访问的元素与上一个元素相同,但是上一个元素没有访问,则退出本次循环。去重复
continue;
if(!isVisited[i]) {//将没有被用过的元素放入path
isVisited[i]=true;
path[k]=chars[i];
dfs(path, k + 1); //递归
isVisited[i]=false;//回溯
}
}
}
}
实现Java全排列, 且无重复。 通用格式~