题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
public class Solution {
static ArrayList<String> arrayList = new ArrayList<String>();
public ArrayList<String> Permutation(String str) {
arrayList.clear();
if (str.length() == 0) {
return arrayList;
}
char[] ch = str.toCharArray();
Arrays.sort(ch);
char a = ch[0];
boolean flag = false;
for (int i = 1; i < ch.length; i++) {
if (ch[i] == a) {
flag = true;
} else {
flag = false;
}
}
if (flag == true) {
arrayList.add(str);
return arrayList;
}
Permutation1(ch, 0, ch.length - 1);
HashSet<String> set = new HashSet<>(arrayList);
ArrayList<String> arrayList1 = new ArrayList<String>(set);
Collections.sort(arrayList1);
return arrayList1;
}
public static void Permutation1(char[] ch,int m,int n){
if(m == n){
String string = "";
for(int i = 0;i<ch.length;i++){
string+=ch[i];
}
arrayList.add(string);
}else {
for(int i = m;i<=n;i++){
char temp = ch[m];
ch[m] = ch[i];
ch[i] = temp;
Permutation1(ch,m+1,n);
temp = ch[m];
ch[m] = ch[i];
ch[i] = temp;
}
}
//return arrayList;
}
}
普通全排列:
package com.sunny.test;
public class quanpailie {
static int k = 0;
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[] = { 1, 2, 3, 4, 5 };
permutations(a, 0, 4);
}
public static void permutations(int[] a, int m, int n) {
if (m == n) {
k++;
System.out.print(k + "个:");
for (int i = 0; i <= n; i++) {
System.out.print(a[i]);
}
System.out.println();
} else {
for (int i = m; i <= n; i++) {
int temp = a[m];
a[m] = a[i];
a[i] = temp;
permutations(a, m + 1, n);
temp = a[m];
a[m] = a[i];
a[i] = temp;
}
}
}
}