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

  • 相关阅读:
    送给每天用电脑超4小时的朋友!!
    股票技术指标分析详细
    2003安装新版MSN9的方法 / MSN9 for 2003
    买卖股票基本原则新手参考
    更改Windows软件默认安装路径
    永不套牢的方法(教你正确止损)
    股票的技术参数很多,图线参数常见的有这些
    教育网ftp大全
    【笔记】【汇编语言】第4章 第一个程序
    【笔记】【汇编语言】第2章 寄存器
  • 原文地址:https://www.cnblogs.com/jhcelue/p/6751828.html
Copyright © 2011-2022 走看看