字符串全排列-循环递归

2019-02-28  本文已影响0人  crishawy

题目描述

输入一串字符串,输出该字符串所有的排列,并且无重复。
例如,输入:“abc”,输出:abc、acb、bac、bca、cab、cba

解决思路

正常思维,先固定一字母,求之后字母的全排列,该问题可划分为更小的子问题,直到所求子问题规模为0,输出结果。显然,使用递归的思路求解,下图为递归的过程:


image.png

递归具有两个基本特征:递归终止条件与递归式

代码实现

package lanqiao.practise;

import java.util.Scanner;

public class Permutation {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //input a string ,output the permutation using recursive
        Scanner s = new Scanner(System.in);
        String string = s.nextLine();
        char[] a = string.toCharArray();
        permutation(a,a.length);
    }
    
    public static void permutation(char[] a,int n) {
        if(a.length == 0)
            return ;
        else {
            permutate(a,0,n);
        }
    }
    
    public static void permutate(char[] a,int k,int n) {
        if(k==n) {
            System.out.println(a);
            return ;
        }
        for(int i=k;i<n;i++) {
            //to prevent the repeated string, we could add a judgement
            if(i!=k&&a[i] == a[k])
                continue;
            swap(a,k,i);
            permutate(a,k+1,n);
            swap(a,k,i);
        }
    }
    public static void swap(char[] a,int i,int j) {
        char temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }

}
上一篇 下一篇

猜你喜欢

热点阅读