字符串的排列

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

 1 # -*- coding:utf-8 -*-
 2 class Solution:
 3     def backTrack(self,ss,k,result,temp,n):
 4         if k >= n:
 5             result.add(''.join(temp[:]))
 6             return
 7         for i in range(len(ss)):
 8             temp.append(ss[i])
 9             self.backTrack(ss[:i]+ss[i+1:],k+1,result,temp,n)
10             temp.pop(-1)
11         
12     def Permutation(self, ss):
13         n = len(ss)
14         if n == 0:
15             return []
16         result = set()
17         temp = []
18         self.backTrack(ss,0,result,temp,n)
19         return list(sorted(result))
20         # write code here

 

Java版本代码,leetcode地址

 1 class Solution {
 2     public void backTrack(String ss,int k,HashSet<String> result,ArrayList<String> temp,int n) {
 3         if(k >= n) {
 4             StringBuilder sBuilder = new StringBuilder();
 5             for(String s: temp) {
 6                 sBuilder.append(s);
 7             }
 8             result.add(sBuilder.toString());
 9         }
10         for(int i = 0;i < ss.length();i++) {
11             temp.add(ss.charAt(i)+"");
12             String part1 = ss.substring(0, i);
13             String part2 = ss.substring(i+1,ss.length());
14             backTrack(part1+part2, k+1, result, temp, n);
15             temp.remove(temp.size()-1);
16         }
17     }
18     public String[] permutation(String s) {
19         int n = s.length();
20         if(n==0) {
21             return new String[0];
22         }
23         HashSet<String> resultHashSet = new HashSet<>();
24         ArrayList<String> temp = new ArrayList<String>();        
25         backTrack(s,0,resultHashSet,temp,n);
26         return resultHashSet.toArray(new String[0]);
27     }
28 }

思路:回溯法,全排列。

因为字符串中可能包含重复的字母,而最终结果要去重,因此需要使用Set数据结构。

posted on 2019-06-13 09:13  Sempron2800+  阅读(107)  评论(0编辑  收藏  举报