剑指offer-面试题28-字符串的排列

来源:互联网 发布:淘宝手绘照片是真的吗 编辑:程序博客网 时间:2024/05/17 18:47

题目描述:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c 所能排列出来的所有字符串abc,acb,bac ,bca,cab 和cba 。

题目分析:可以分成两步。第一步求所有可能出现在第一个位置的字符,即把第一个字符和后面所有的字符交换。第二步固定第一个字符,求后面所有字符的排列。这时候再把后面的字符分成两部分,后面字符的第一个字符以及这个字符之后的所有字符。以此类推。

//字符串的所有排列    public static void Permutation(char[] str) {        if (str == null || str.length < 1) {            return;        }        Permutation(str,0);    }    public static void Permutation(char[] str, int start) {        if (start == str.length - 1) {//递归结束的判断,最后一个元素            System.out.println(new String(str));        } else {            char temp;            for (int i = start; i < str.length; i++) {                temp = str[start];                str[start] = str[i];                str[i] = temp;                Permutation(str, start + 1);            }        }    }
0 0
原创粉丝点击