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

来源:互联网 发布:js ajax视频教程 编辑:程序博客网 时间:2024/06/08 06:35

给定一个数组,返回其所有可能的排列。

注意事项
你可以假设没有重复数字。

样例
给出一个数组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 <= 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);    }}
原创粉丝点击