标签:
【题目】输入一个字符串,按字典序打印出该字符串中字符的所有排列。
例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
结果请按字母顺序输出。
1 package com.exe5.offer; 2 3 import java.util.ArrayList; 4 import java.util.Collections; 5 6 /**23 7 * 输入一个字符串,按字典序打印出该字符串中字符的所有排列。 8 * 例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 9 * 结果请按字母顺序输出。 10 * @author WGS 11 * 12 */ 13 public class SequenceOfArrays { 14 15 public ArrayList<String> permutation(String str){ 16 ArrayList<String> list=new ArrayList<String>(); 17 if(str==null || str.length()<=0) 18 return list; 19 list=permutation(list,str.toCharArray(),0,str.length()); 20 Collections.sort(list); 21 return list; 22 23 } 24 private ArrayList<String> permutation(ArrayList<String> list, char[] str, int begin, int length) { 25 if(begin==length-1){ 26 if(!list.contains(String.valueOf(str))){ 27 list.add(String.valueOf(str)); 28 } 29 }else{ 30 for(int i=begin;i<length;i++){ 31 if(i==begin || str[i]!=str[begin]){ 32 swap(str,begin,i); 33 permutation(list,str,begin+1,length); 34 swap(str,begin,i); 35 } 36 } 37 38 } 39 return list; 40 } 41 private void swap(char[] str, int begin, int i) { 42 char temp=str[begin]; 43 str[begin]=str[i]; 44 str[i]=temp; 45 46 } 47 public static void main(String[] args) { 48 SequenceOfArrays s=new SequenceOfArrays(); 49 String str="abc"; 50 ArrayList<String> list=s.permutation(str); 51 for (String s2 : list) { 52 System.out.println(s2+" "); 53 } 54 55 } 56 57 }
标签:
原文地址:http://www.cnblogs.com/noaman/p/5473464.html