如何求出几个字符的所有排列,很多人不能一下子想出解决方案。那我们是不是可以考虑把这个复杂的问题分解成小的问题,比如,我们把一个字符串看成两部分组成,第一个部分是它的第一个字符,第二部分是后面所有的字符。我们用两种不同的背景颜色区分字符串的两部分。
package question38_string;
import com.sun.glass.ui.Size;
/**
* @Classname Solution
* @Description TODO
* @Date 2020/3/27 23:22
* @Created by mmz
*/
public class Solution {
public void changeChar(char[] chars,int index1,int index2){
char temp = chars[index1];
chars[index1] = chars[index2];
chars[index2] = temp;
}
public void print(char[] chars,int index,int size){
if(index == size){
for(int i = 0;i<size;++i){
System.out.print(chars[i]);
}
System.out.println();;
}else{
for(int i =index;i<size;++i){
changeChar(chars,i,index);
print(chars,index+1,size);
changeChar(chars,i,index);
}
}
}
public static void main(String[] args) {
char[] chars = new char[]{'a','b','c','d'};
int size = chars.length;
Solution solution = new Solution();
solution.print(chars,0,size);
}
}
用全排列也能做出来
package question38_字符串的排列;
/**
* @Classname Mmz
* @Description TODO
* @Date 2020/7/19 23:38
* @Created by mmz
*/
public class Mmz {
static void Core(char[] chars){
if(chars == null || chars.length<=0){
return;
}
dfs(0,chars);
}
static void dfs(int index,char[] chars){
if(index == chars.length){
System.out.println(String.valueOf(chars));
}
for(int i = index;i<chars.length;++i){
swap(i,index,chars);
dfs(index+1,chars);
swap(i,index,chars);
}
}
static void swap(int i ,int index,char[] chars){
char target = chars[i];
chars[i] = chars[index];
chars[index] = target;
}
public static void main(String[] args) {
char[] chars = new char[]{'a','b','c'};
int size = chars.length;
Core(chars);
}
}