• 全排列


    全排列代码

    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);
    	        }
    	    }
    
    }
    




     

  • 相关阅读:
    读书笔记_Effective_C++_条款二:尽量以const, enum, inline替换#define
    读书笔记_代码大全_第14章_组织直线型代码_第15章_使用条件语句
    读书笔记_代码大全_第31章_布局与风格
    读书笔记_代码大全_第16章_控制循环
    读书笔记_Effective_C++_条款五:了解C++默默编写并调用哪些函数
    python学习笔记(三)——字符串
    python学习笔记(六)——函数
    Windows下安装Django
    python小专题——time模块
    python学习笔记(四)——数据字典
  • 原文地址:https://www.cnblogs.com/xqzt/p/5637041.html
Copyright © 2020-2023  润新知