字符串的全排列
/**
* @ClassName TestDemo37
* @Description 面38 全排列
* @Author lzq
* @Date 2019/1/5 20:54
* @Version 1.0
**/
public class TestDemo37 {
public static int count = 0; //记录排列的种树
/**
* 交换位置
* @param chars
* @param i
* @param j
*/
public static void swap(char[] chars,int i,int j){
char temp = chars[i];
chars[i] = chars[j];
chars[j] = temp;
}
/**
* 全排列主方法
* @param chars
* @param k
*/
public static void allPermutate(char[] chars,int k){
if(k == chars.length-1){
print(chars);
count++;
}else{
for(int i = k;i < chars.length;i++){
swap(chars,k,i);
allPermutate(chars, k+1);
swap(chars,k,i);
}
}
}
//打印
public static void print(char[] chars) {
for(int i = 0;i < chars.length;i++){
System.out.print(chars[i]+"\t");
}
System.out.println();
}
//起始方法
public static void Permutate(String str) {
if(str == null || str.length() == 0) {
return;
}
allPermutate(str.toCharArray(),0);
}
public static void main(String[] args) {
String str = "ABC";
Permutate(str);
System.out.println(count);
}
}
运行结果:
A B C
A C B
B A C
B C A
C B A
C A B
6
代码原理:
字符串的组合
/**
* @ClassName TestDemo38
* @Description 组合
* @Author lzq
* @Date 2019/1/6 1:34
* @Version 1.0
**/
public class TestDemo38 {
public static void main(String[] args) {
String str = "ABC";
combination(str);
}
/**
* 求字符串组合的主方法
* @param s
*/
public static void combination(String s) {
char[] chars = s.toCharArray();
StringBuffer str = new StringBuffer();
core(chars,str,0);
}
/**
* 求字符串组合的核心方法
* @param chars
* @param str
* @param index
*/
private static void core(char[] chars,StringBuffer str,int index) {
if(index == chars.length) {
System.out.println(str.toString());
return;
}
str.append(chars[index]); //选取
core(chars,str,index+1); //剩下的里面选len-1个
str.deleteCharAt(str.length()-1); //删除
core(chars,str,index+1); //剩下的里面选len个
}
}
运行结果:
A
B
C
AB
AC
BC
ABC