62,628
社区成员
发帖
与我相关
我的任务
分享
//枚举出n数组中从beg到end的全部排列
public static void perm(char[] n, int beg, int end) {
//如果beg和end相等,对应排列只有一种,结束。
if (beg == end) {
addNumber(String.valueOf(n));
} else {//如果beg和end不等。
for (int i = beg; i <= end; ++i) {//枚举出beg位元素在各个位置上的排列情况
swap(n, beg, i);//beg位元素与i位元素互换
perm(n, beg + 1, end);//枚举出n数组中从beg+1到end的全部排列
swap(n, beg, i);//beg位元素与i位元素互换,恢复原样
}
}
}
//在数组中交换下标是x和y的两个元素
public static void swap(char[] n, int x, int y) {
//下标相同或内容相同,不交换
if (x == y || n[x] == n[y]) {
return;
}
//交换:
char temp = n[x];
n[x] = n[y];
n[y] = temp;
}