您的位置:首页 > 其它

【LintCode】数组的全排序(1)

2017-08-28 17:45 417 查看
给定一个数组,返回其所有可能的排列。

注意事项

你可以假设没有重复数字。

样例

给出一个数组abc,

其全排列为:

abc

acb

bac

bca

cba

cab

Java:

public class Solution{
private static void print(char[] arr){
if(arr == null || arr.length == 0){
return;
}
for(int i = 0; i < arr.length; i++){
System.out.print(arr[i]);
}
System.out.println();
}
private static void swap(char[] ch, int i, int k){
char temp = ch[i];
ch[i] = ch[k];
ch[k] = temp;
}
private static void permutation(char[] arr, int k){
//递归:f(n) = k·f(n-1),将字符串中每一个元素都放到第k位(假设就是首位,即k设为0),剩下的n-1个进行全排列(递归)
// (k
4000
<= arr.length-1)

if(k == arr.length - 1){
print(arr);
return;
}
for(int i = k; i < arr.length; i++) {
swap(arr,i,k);
permutation(arr,k+1);
swap(arr,i,k);
}
}

public static void main(String[] args){
char[] ch = {'a','b','c'};
permutation(ch,0);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: