zoukankan      html  css  js  c++  java
  • JAVA-从题目看算法,将输入字符串进行排序并输出

    来看一个排列的样例。它所做的工作是将输入的一个字符串中的全部元素进行排序并输出,比如:你给出的參数是"abc" 则程序会输出:abc acb bac bca cab cba

    这是一个典型的可用递归算法来实现的样例,我们来看一下利用递归的2种不同解法。


    1.典型递归元素交换的算法

    (1)算法的出口在于:low=high也就是如今给出的排列元素仅仅有一个时。
      (2)算法的逼近过程:先确定排列的第一位元素。也就是循环中i所代表的元素。


    package test;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Demo1 {
    
    	public static void main(String[] args) {
    		permute("ABCD");
    	}
    
    	public static void permute(String str) {
    		char[] strArray = str.toCharArray();
    		permute(strArray, 0, strArray.length - 1);
    	}
    
    	public static void permute(char[] list, int low, int high) {
    		int i;
    		if (low == high) {
    			String cout = "";
    			for (i = 0; i <= high; i++)
    				cout += list[i];
    			System.out.println(cout);
    		} else {
    			for (i = low; i <= high; i++) {
    				char temp = list[low];
    				list[low] = list[i];
    				list[i] = temp;
    				permute(list, low + 1, high);
    				temp = list[low];
    				list[low] = list[i];
    				list[i] = temp;
    			}
    		}
    	}
    }
    


    2.利用String的deleteCharAt和charAt来实现元素的交换

    package test;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Demo {
    
    	public static void main(String[] args){
    		String a = "ABCD";
    		List<String> result = list(a,"");
    		
    		System.out.println(result.size());
    		System.out.println(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> mark = list(new StringBuilder(base).deleteCharAt(i).toString(),buff+base.charAt(i));
    			result.addAll(mark);
    		}
    		
    		return result;
    	}
    }
    

    2种方法相比較都是递归算法的实现。但另外一种更加灵活一些,也更加easy进行输出比較。

  • 相关阅读:
    关于使用wcf架构分布式系统的一点想法
    vs2012 远程调试服务器上iis下的程序
    F#定义方法参数
    产生不重复的随机数
    巧在C#中设置多维动态数组,可以动态增加及删除
    C#时间相减
    css控制图片大小的方法
    常用网络命令
    DEDE SQL 常用语句
    未审核文档发布时间的自动更改方法for DEDEcms v5.3(修正版)
  • 原文地址:https://www.cnblogs.com/jhcelue/p/6751828.html
Copyright © 2011-2022 走看看