全排列 (递归版)Java版

利用递归思想,求字符串的全排列:
Java版:

import java.util.ArrayList;
import java.util.TreeSet;

public class PermutationTest {
    public static void main(String[] args){
        String string ="abcd";
        ArrayList<String> arrayList = permutation(string);
        for(String s : arrayList){
            System.out.println(s + "\n");
        }
    }

    public static ArrayList<String> permutation(String s){
        ArrayList<String> arrayList = new ArrayList<>();
        if(s == null || s.length() == 0) return arrayList;
        char[] chars = s.toCharArray();
        TreeSet<String> treeSet = new TreeSet<>();
        permutation(chars, 0, treeSet);
        arrayList.addAll(treeSet);
        return arrayList;
    }

    public static void permutation(char[] chars, int begin, TreeSet<String> result){
        if(chars == null || chars.length == 0 || begin < 0 || begin > chars.length - 1) return;

        if(begin == chars.length - 1){
            result.add(String.valueOf(chars));
        }else {
            for(int i = begin; i < chars.length; i++){
                swap(chars, begin, i);
                permutation(chars, begin + 1, result);
                swap(chars, begin, i);
            }
        }
    }

    public static void swap(char[] x, int a, int b){
        char t = x[a];
        x[a] = x[b];
        x[b] = t;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值