全排列作为一个经典的递归问题,就是把一个大问题分解为若干个相互独立的子问题,这些子问题相互独立且与原问题相同。 递归的解这些子问题,然后将这些子问题的解合并得到原问题的解。举个例子,1234的全排列 就等于1(234)的全排列+2(134)的全排列+3(214)+4(231)全排列,同理依次类推。 for循环里面有递归,注意它的执行顺序。执行顺序为先纵后横,先递归下去,再进行i++。
代码:
public class 全排列04
{
static int
[] a
= {1,2,3
};
public static void main
(String
[] args
) {
perm
(a,0
);
}
private static void swap
(int i,int j
) {//交换
int t
=a
[i
];
a
[i
]=a
[j
];
a
[j
]=t
;
}
private static void perm
(int
[] a,int k
) {
if
(k
==a.length
) {
for
(int e:a
) {
System.out.print
(e+
" ");
}
System.out.println
();
}
for
(int i
=k
;i
<a.length
;i++
) {
swap
(i,k
);
perm
(a,k+1
);
swap
(i,k
);//回溯
}
}
}
转载请注明原文地址:https://blackberry.8miu.com/read-44569.html