题目:
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
思路:
利用回溯法
Java
package nowcoder;
import java.util.ArrayList;
import java.util.List;
public class S27_Permutatioin {
public ArrayList<String> Permutation(String str){
ArrayList<String> result = new ArrayList<String>();
if (str.length() == 0) return result;
fun(str.toCharArray(), result, 0);
return result;
}
private void fun(char[] ch, List<String> list, int i){
if (i == ch.length-1){
if (!list.contains(new String(ch))) {
list.add(new String(ch));
return;
}
}
else {
for (int j=i;j<ch.length;j++){
swap(ch,i,j);
fun(ch,list,i+1);
swap(ch,i,j);
}
}
}
private void swap(char[] ch, int i, int j){
char t = ch[i];
ch[i] = ch[j];
ch[j] = t;
}
public static void main(String[] args){
S27_Permutatioin s27 = new S27_Permutatioin();
String str = "abc";
System.out.println(s27.Permutation(str));
}
}
Python
思路:
利用Python的特性,递归
class Permutation:
def permutation(self,str):
res = set()
if len(str) <= 1:
return str
for i in range(len(str)):
for j in self.permutation(str[:i]+str[i+1:]):
res.add(str[i]+j)
return sorted(res)
if __name__ == '__main__':
test = Permutation()
str = "abc"
print(test.permutation(str))