题目描述

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

输入描述:

输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。

 

题目链接:

https://www.nowcoder.com/practice/fe6b651b66ae47d7acce78ffdd9a96c7?tpId=13&tqId=11180&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

 

 

 

package com.sunshine.OFFER66_SECOND;

import org.junit.Test;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;

public class A27_Permutation {

    @Test
    public void test() {
        Permutation("abcd");
    }


    Set<String> anss = new HashSet<>();

    public ArrayList<String> Permutation(String str) {
        if("".equals(str)){
            return new ArrayList<>();
        }
        solve(str.toCharArray(), 0);
        ArrayList<String> arrayList = new ArrayList<>(anss);
        System.out.println(arrayList.size());
        arrayList.sort(String::compareTo);
        arrayList.forEach(a -> System.out.println(a));
        return arrayList;
    }
    //需要自己交换自己
    public void solve(char[] str, int pos) {
        anss.add(new String(str));
        for (int i = pos; i < str.length; i++) {
            swap(str, pos, i);
            solve(str, pos + 1);
            swap(str, pos, i);
        }

    }

    private void swap(char[] arr, int i, int j) {
        char tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }
}

 

posted on 2019-09-03 17:20  MoonBeautiful  阅读(293)  评论(0编辑  收藏  举报