全排列问题
求字符串“ABC”中说与字符的全排列(不包含重复)
(注 :String.valueOf(arr) 打印数组)
字母版本
import java.util.TreeSet;
public class quanpailei {
static TreeSet<String> set=new TreeSet<>();
public static void main(String[] args) {
String s ="ABBC";
char [] arr=s.toCharArray();
pailei(arr,0,arr.length);
for (String i:set){
System.out.println(i);
}
}
private static void pailei(char[] arr, int from, int to) {
if (from==to){
set.add(String.valueOf(arr));
}
for (int i = from; i <to ; i++) {
Swap(arr,i,from);
pailei(arr,from+1,to);
Swap(arr,i,from);
}
}
private static void Swap(char[] arr, int i, int from) {
char a=arr[i];
arr[i]=arr[from];
arr[from]=a;
}
}
数字版本
import java.util.ArrayList;
import java.util.List;
import java.util.TreeSet;
class Solution {
static TreeSet<String> set=new TreeSet<>();
public List<List<Integer>> permute(int[] nums) {
set=new TreeSet<>();
pailei(nums,0,nums.length);
List<List<Integer>> List = new ArrayList<>();
for(String i:set ){
java.util.List<Integer> list1 = new ArrayList<>();
for(String j:i.split(String.valueOf(','))){
int a=0;
int P=1;
for (char A:j.toCharArray()){
if (A=='-'){
P=-1;
}else {
a=a*10+(A-'0');
}
}
list1.add(P*a);
}
List.add(list1);
}
return List;
}
private static void pailei(int[] arr, int from, int to) {
if (from==to){
String S="";
for (int i:arr){
S+=i+",";
}
set.add(S);
}
for (int i = from; i <to ; i++) {
Swap(arr,i,from);
pailei(arr,from+1,to);
Swap(arr,i,from);
}
}
private static void Swap(int[] arr, int i, int from) {
int a=arr[i];
arr[i]=arr[from];
arr[from]=a;
}
}