zoukankan      html  css  js  c++  java
  • 全排列问题

    1. 如何输出字符串的所有组合?
      问题描述:假如字符串中所有字符都不重复,如何输出字符串的所有组合。例如:abca,结果应是a,b,c,ab,ac,bc,abc. 最容易想到的就是递归了,但效率会变得很差.因为栈被调用了2^n次方,为了提高效率,可以构造一个长度为n的01字符串,表示输出结果中是否包含某个字符,例如:001->c,010->b,101->ac......,
    所以原题就是要求输出"001"-"111"这2^n-1个组合对应的字符串。

    Demo_1:

    import java.util.*;
    class Test {
    	private static ArrayList<String> combineString(String s) {
    		int len = s.length();
    		ArrayList<String> list = new ArrayList<String>(); 
    		int count = (int) (Math.pow(2, len));
    		for(int i = 1; i < count; ++i){
    			String temp = "";
    			String str = Integer.toBinaryString(i);
    			while(str.length() < len){
    				str = "0" + str;
    			}
    		    for(int j = 0; j < str.length(); ++j){
    		    	if(str.charAt(j) == '1'){
    		    		temp += s.charAt(j);
    		    	}
    		    }
    		    list.add(temp);
    		}
    		return list;
    	}
    	public static void main(String[] args) {
    		double startTime = System.currentTimeMillis();
    		String s = "abc";
    		ArrayList<String> result = combineString(s);
    		for (String r : result) {
    			System.out.println(r);
    		}
    		double endTime = System.currentTimeMillis();
    		System.out.println("程序运行时间:"+(endTime-startTime)/1000+" ms");
    	}
    }
    

     运行结果:

    c
    b
    bc
    a
    ac
    ab
    abc
    程序运行时间:0.001 ms

  • 相关阅读:
    hadoop集群无法找到datanode节点问题解决
    Startup.A51说明(上)
    UCOSII基础之数据结构
    FPGA之难度
    UCOSII学习笔记【二】
    (转)PCB中各层的含义(protel中)
    UCOSII学习笔记 一
    查看51汇编,解决奇怪的问题
    滑雪
    HMM的理解
  • 原文地址:https://www.cnblogs.com/bosongokay/p/6810047.html
Copyright © 2011-2022 走看看