• 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进行输出比較。

  • 相关阅读:
    PL/SQL 训练05--游标
    PL/SQL 训练04--事务
    PL/SQL 训练03 --异常
    PL/SQL 训练02--集合数组
    PL/SQL 训练01--基础介绍
    25 mysql怎么保证高可用
    pt工具之pt-archiver
    Oracle日常性能问题查看
    Oracle的cursor
    Oracle 索引扫描的几种情况
  • 原文地址:https://www.cnblogs.com/jhcelue/p/6751828.html
Copyright © 2020-2023  润新知