字符串的排列与组合

在做编程题时经常遇到字符串的排列与组合问题,特此总结一下

1.字符的全排列(无重复字符)

    /**
	 * 字符串的全排列,无重复字符
	 * @param list 字符数组
	 * @param n 当前交换的位置(初始为0)
	 */
	public static void permute(char[] list,int n){
		if(n==list.length){
			for(int i=0;i

2.字符的全排列(含重复字符)

    /**
	 * 字符串的全排列(含重复字符)
	 * @param list 字符数组
	 * @param n 当前交换的位置(初始为0)
	 */
	public static void permute(char[] list,int n){
		if(n==list.length){
			for(int i=0;i

3.字符的组合(无重复字符)

public class Test {
	//存储字符
	static ArrayList stack = new ArrayList<>();
	
	public static void main(String[] args) {
		String str = "1234";
	
		for(int i=0;i=m||n<0)
			return;
		//添加第一个字符
		stack.add(list[start]);
		if(n==0)
			System.out.println(stack);
		combine(list, start+1, m, n-1);
				
		//没有添加第一个字符
		stack.remove(stack.size()-1);
		combine(list, start+1, m, n);
	}
}

4.字符组合(含重复字符)

public class Test {
	
	static StringBuilder sb = new StringBuilder();
	static ArrayList ans = new ArrayList<>();
	
	public static void main(String[] args) {
		String str = "1223";
		
		for(int i=0;i=m||n<0)
			return;
		//添加第一个字符
		sb.append(list[start]);
		if(n==0){
			String str = sb.toString(); 
			if(!ans.contains(str))
				ans.add(str);
		}
		combine(list, start+1, m, n-1);
				
		//没有添加第一个字符
		sb.deleteCharAt(sb.length()-1);
		combine(list, start+1, m, n);
	}
}

 

你可能感兴趣的:(java)