字符串的排列

来源:互联网 发布:通达信软件官网 编辑:程序博客网 时间:2024/06/07 04:11

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。

思路:递归实现,先确定第一个字符,再求后面字符串的全排列。
确定一个字符时将它与后面的交换,同时调整位置。

import java.util.ArrayList;public class Solution {    public ArrayList<String> Permutation(String str) {       ArrayList list = new ArrayList();        if(str.equals(""))            return list;       StringBuilder sb = new StringBuilder();       char[] charArray = str.toCharArray();       getAllSort(sb,charArray,list,0);       return list;    }    public void getAllSort(StringBuilder sb,char[] charArray,ArrayList list,int begin){        if(begin == charArray.length && !list.contains(sb.toString())){            list.add(sb.toString());        }        for(int i = begin; i < charArray.length; i++){            //得到begin位置上所有可能出现的字符            char temp = charArray[begin];            charArray[begin] = charArray[i];            charArray[i] = temp;            //移动元素            for(int j = i;j > begin + 1; j--){                temp = charArray[j];                charArray[j] = charArray[j-1];                charArray[j-1] = temp;            }            sb.append(charArray[begin]);            getAllSort(sb,charArray,list,begin+1);            sb.deleteCharAt(begin);            //还原元素            for(int j = begin + 1;j < i; j++){                temp = charArray[j];                charArray[j] = charArray[j+1];                charArray[j+1] = temp;            }            temp = charArray[begin];            charArray[begin] = charArray[i];            charArray[i] = temp;        }    }}
原创粉丝点击