package cn.csu.offers;
import java.util.List;
import java.util.Scanner;
/**
* 字符串的排列、组合问题
* @author Tiekai Ba 2017年6月24日
*
*/
public class Offer_28 {
/**
* 输出n个字符的全部组合情况
* @param s 待处理字符串
* @param m 组合字符个数
* @param list 缓存组合字符
*/
public static void combination(String s,int m,List<Character> list){
if(m == 0){
System.out.println(list);
return;
}
if(s.length() != 0){
//选择当前元素
list.add(s.charAt(0));
combination(s.substring(1, s.length()), m-1, list);
//不选择当前元素
list.remove(list.size()-1);
combination(s.substring(1,s.length()), m, list);
}
}
/**
* 输出字符串的全排列
* @param start
* @param charArray
*/
public static void arrangement(int start,char[] charArray){
if(start == charArray.length-1){
for(int i = 0;i <charArray.length;i++){
System.out.print(charArray[i]);
}
System.out.println();
}
for(int i = start; i <charArray.length;i ++){
swap(i,start,charArray);
arrangement(start+1, charArray);
swap(i,start,charArray);
}
}
/**
* 交换数组中的两个元素
* @param i
* @param start
* @param charArray
*/
private static void swap(int i, int start, char[] charArray) {
if(i>=0 && i <=charArray.length && start >=0 && start < charArray.length){
char temp = charArray[i];
charArray[i] = charArray[start];
charArray[start] = temp;
}
}
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
String string = s.nextLine();
// List<Character> list = new ArrayList<>();
// for(int i =1; i <= string.length();i++){
// combination(string, i, list);
// }
arrangement(0, string.toCharArray());
}
}
字符串的排列组合问题-java
最新推荐文章于 2023-04-25 20:22:37 发布