字符串全排列问题可以在需要字符串序列中选出一个字符放到第一位,然后对剩余的字符进行全排列,递归进行,可以得到所有字符的全排列,遇到有重复的字符的,只需要加一个判断即可,即判断之前是不是已经出现过了,如果已经出现过了就不做处理了。
java代码:
package test;
public class StringQuanPaiLie {
public void quanpailie(char[] list, int from, int to) {
if (to < 0 || from > list.length)
return ;
//输出每一次的排列字符串
if (from == to) {
for (int i = 0; i <= to; i++) {
System.out.print(list[i]);
}
System.out.print("\n");
}
else {
for (int i = from; i <= to; i++) {
if (!isexists(list, from, i)) {
swap(list, i, from);
quanpailie(list, from + 1, to);
swap(list, i, from);
}
}
}
}
//判断是否在前面出现过
public boolean isexists(char[] c, int pre, int curr) {
for (int i = pre; i < curr; i++) {
if (c[i] == c[curr])
return true;
}
return false;
}
public void swap(char[] c, int a, int b) {
char tmp = c[a];
c[a] = c[b];
c[b] = tmp;
}
public static void main(String[] args) {
String string = "132ac";
char[] c = string.toCharArray();
StringQuanPaiLie ccLie = new StringQuanPaiLie();
ccLie.quanpailie(c, 0, string.length() - 1);
}
}
2030

被折叠的 条评论
为什么被折叠?



