编程之法-面试和算法心得

1.3字符串的全排列


输入一个字符串,打印出该字符串中字符的所有排列。从字符串中选出一个字符作为排列的第一个字符,然后对剩余的字符进行全排列。如此递归处理,从而得到所有字符的全排列。以对字符串"abc"进行全排列为例,
可以按下述步骤执行。

例如:输入字符串"abc",则输出由字符'a'、'b'、'c'所能排列出来的所有字符。"abc"、"acb"、"bac"、"bca"、"cab"和"cba"。

  • 将a固定在第一位,求后面bc的排列,得到:"abc"和"acb"。
  • 将b固定在第一位,求后面ac的排列,得到:"bac"和"bca"。
  • 将c固定在第一位,求后面ba的排列,得到:"cba"和"cab"。

package com.programming.test;

/**
 * 
 * @ClassName: Test03_1.java
 * @Description:字符串的全排列:递归实现
 * @author: Henray
 * @version:
 * @Date: 2018年12月17日
 *
 */
public class Test03_1 {

    public static void main(String[] args) {

        String str = "abc";
        Permutation(str, 0, 2);
    }

    public static void Permutation(String string, int start, int end) {

        char[] ch = string.toCharArray();
        if (start == end) {
            for (int i = 0; i <= end; i++) {
                System.out.print(ch[i]);
            }
            System.out.println();
        } else {
            for (int i = start; i <= end; i++) {
                swap(ch, i, start);
                Permutation(String.valueOf(ch), start + 1, end);
                swap(ch, i, start);
            }
        }
    }

    public static void swap(char[] ch, int a, int b) {
        char temp = ch[a];
        ch[a] = ch[b];
        ch[b] = temp;
    }
}
 

猜你喜欢

转载自blog.csdn.net/qq_31066637/article/details/85048674