文字列の整列とグループ化

2124 ワード

プログラミングの問題をする時、よく文字列の配置と組み合わせの問題に出会います。ここでまとめます。
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);
	}
}