剑指Offer—27—字符串的排列
2017-08-23 21:16
381 查看
字符串的排列——输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符 a, b, c 所能排列出来的所有字符串 abc, acb, bac, bca, cab 和 cba。(输入一个字符串,长度不超过 9 (可能有字符重复),字符只包括大小写字母。)
package A27字符串的排列; import java.io.BufferedWriter; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; public class Solution { public ArrayList<String> Permutation(String str) { char[] arr = new char[str.length()]; for(int i=0;i<str.length();i++){ arr[i] = str.charAt(i); } ArrayList<String> list = new ArrayList<>(); test(arr, 0, str.length()-1,list); Set<String> set = new HashSet<>(); set.addAll(list); list.clear(); list.addAll(set); return list; } public void test(char[] arr, int start, int end,ArrayList<String> list){ if (start == end) { StringBuilder stringBuilder = new StringBuilder(); for(int i=0;i<arr.length;i++){ stringBuilder.append(arr[i]); } list.add(stringBuilder.toString()); } for(int i=start;i<=end;i++){ char temp = arr[start]; arr[start] = arr[i]; arr[i] = temp; test(arr, start+1, end,list); temp = arr[start]; arr[start] = arr[i]; arr[i] = temp; } } public static void main(String[] args) { Solution solution = new Solution(); char[] arr = {'a','b','c'}; ArrayList<String> list = new ArrayList<>(); ArrayList<String> list2 = solution.Permutation("aa"); for (String string : list2) { System.out.println(string); } } }
相关文章推荐
- 剑指offer 27 字符串的排列
- [剑指Offer] 27.字符串的排列
- 【剑指offer-解题系列(27)】字符串的排列
- (C++)剑指offer-27:字符串的排列(分解让复杂问题简单)(没太懂)
- 【剑指offer】27字符串的排列
- 剑指offer——27.字符串排列
- 剑指offer(27)—字符串的排列
- 剑指offer-27.字符串的排列
- 剑指offer第28题:字符串的排列
- 剑指offer——字符串的排列(好题,扩展题也很好,全排列的算法)
- 【剑指offer】字符串的排列
- 剑指offer:(28)分解让复杂问题简单化 :字符串的排列
- 【剑指offer28】字符串的全排列和组合
- (二十)剑指offer之字符串的排列
- 剑指Offer:字符串的排列
- 剑指Offer之 - 字符串的排列
- 【剑指Offer】字符串全排列
- 剑指offer之面试题28:字符串的排列
- 剑指Offer—字符串排列
- 【剑指offer】字符串的排列