您的位置:首页 > Web前端

剑指Offer——字符串的排列

2018-03-07 21:25 387 查看

题目描述

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
import java.util.ArrayList;
import java.util.*;
public class Solution {
//思路:一个字符串的排列可以分为两个部分来看,第一个部分是第一个字母选择随机某一个字符
//然后剩下的字符再选择剩下的字符作为第一个字符,显然这是一个递归的过程,那么我们分别把
//第一个字符和后面的字符一次交换顺序,就可以得到以不同字符开头的排列,但是这里注意,因
//为存在重复的字符,因此当第一个字符和后面的字符重复的时候,不交换字符
public ArrayList<String> Permutation(String str) {
ArrayList<String> aList = new ArrayList<>();
if(str == null){
return aList;
}
PermutationCore(str.toCharArray(),0,aList);
Collections.sort(aList);
return aList;
}
public void PermutationCore(char[] chars,int begin, ArrayList<String> al){
//char[] chars = str.toCharArray();
if(begin == (chars.length-1)){
String s = String.valueOf(chars);
if(!al.contains(s))
al.add(s);
}
else{
for(int i = begin; i<chars.length; i++){
char temp0 = chars[i];
chars[i] = chars[begin];
chars[begin] = temp0;

PermutationCore(chars,begin+1,al);

char temp1 = chars[i];
chars[i] = chars[begin];
chars[begin] = temp1;
}
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  字符串排列