您的位置:首页 > Web前端

剑指offer:字符串的排列

2017-08-08 09:59 435 查看
题目描述

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

输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。


方法1:
import java.util.ArrayList;
import java.util.TreeSet;

public class Solution {
public ArrayList<String> Permutation(String str) {
ArrayList<String> strList=new ArrayList<>();
if(str==null||str.length()==0) return strList;

char []chars=str.toCharArray();
TreeSet<String> temp=new TreeSet<String>();
Permutation(chars,0,temp);
strList.addAll(temp);
return strList;
}

public void Permutation(char []chars,int begin,TreeSet<String> result){
if(chars==null||chars.length==0||begin<0||begin>chars.length-1)return;

if(begin==chars.length-1)
result.add(String.valueOf(chars));
else{
for(int i=begin;i<chars.length;i++){
swap(chars,begin,i);
Permutation(chars,begin+1,result);
swap(chars,begin,i);
}
}
}

public void swap(char []chars,int a,int b){
char t=chars[a];
chars[a]=chars[b];
chars[b]=t;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息