• 全排列


     

    全排列代码

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    public class FullSort {
    
    	private static void sort(List<String> datas, List<String> target, int size) {
    		if (target.size() == size) {
    			for (Object obj : target)
    				System.out.print(obj);
    			System.out.println();
    			return;
    		}
    		for (int i = 0; i < datas.size(); i++) {
    			List<String> newDatas = new ArrayList<String>(datas);
    			List<String> newTarget = new ArrayList<String>(target);
    			newTarget.add(newDatas.get(i));
    			newDatas.remove(i);
    			sort(newDatas, newTarget, size);
    		}
    	}
    
    	public static void main(String[] args) {
    		String[] datas = new String[] { "a", "b" };
    		int size = datas.length;
    		sort(Arrays.asList(datas), new ArrayList<String>(), size);
    	}
    
    }
    

    代码2

    改进  调用串的函数,将字符的操作变为字符串的操作,原理一样

    import java.util.ArrayList;
    import java.util.List;
    
    public class NumTest {
        public static void main(String[] args) {
            String s="ABCD";//原字符串
            List<String> result = list(s, "");//列出字符的组合,放入result
            
            System.out.println(result.size());;
            System.out.println(result);
        }
        
        /**
         * 列出基础字符串(base)的所有组合
         * @param base 以该字符串作为基础字符串,进行选择性组合。
         * @param buff 所求字符串的临时结果
         * @param result 存放所求结果
         */
        public static List<String> list(String base,String buff){
         List<String> result = new ArrayList<String>();//存放结果信息。
            if(base.length()<=0){
                result.add(buff);
            }
            for(int i=0;i<base.length();i++){
             List<String> temp = list(new StringBuilder(base).deleteCharAt(i).toString(),buff+base.charAt(i));
             result.addAll(temp);
             
            }
            
            return result;
        }
    }
    

    代码2的另一种写法

    import java.util.ArrayList;
    import java.util.List;
    
    public class NumTest {
    	
    	   public static void main(String[] args) {
    	        String s="ABCD";//原字符串
    	        List<String> result = new ArrayList<String>();//存放结果信息。
    	        list(s, "", result);//列出字符的组合,放入result
    	        System.out.println(result.size());;
    	        System.out.println(result);
    	    }
    	    
    	    /**
    	     * 列出基础字符串(base)的所有组合
    	     * @param base 以该字符串作为基础字符串,进行选择性组合。
    	     * @param buff 所求字符串的临时结果
    	     * @param result 存放所求结果
    	     */
    	    public static void list(String base,String buff,List<String> result){
    	        if(base.length()<=0){
    	            result.add(buff);
    	        }
    	        for(int i=0;i<base.length();i++){
    	            list(new StringBuilder(base).deleteCharAt(i).toString(),buff+base.charAt(i),result);
    	        }
    	    }
    
    }
    




     

  • 相关阅读:
    JDK14的新特性:JFR,JMC和JFR事件流
    java深入理解浅拷贝和深拷贝
    jcmd:JDK14中的调试神器
    你真的了解java class name吗?
    JDK14中的java tools简介
    JDK 14的新特性:switch表达式
    JDK 14的新特性:文本块Text Blocks
    java中的内部类内部接口详解
    一文弄懂String的所有小秘密
    深入理解java的泛型
  • 原文地址:https://www.cnblogs.com/xiaoqiangzhaitai/p/5637265.html
Copyright © 2020-2023  润新知