剑指offer打卡16-字符串的排序(java版)
1. 考察知识点
2. 题目
- 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
- 输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
3. 思路
- 利用递归实现
4. 代码实现
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Solution {
public ArrayList<String> Permutation(String str) {
ArrayList<String> result = new ArrayList<>();
if (str == null || str.length()==0)
return result;
permutationAll(str.toCharArray(), 0, result);
Collections.sort(result);
return result;
}
public void permutationAll(char[] str, int begin, List<String> result){
if (begin == str.length - 1){
result.add(String.valueOf(str));
}else {
for (int i = begin; i < str.length; i++) {
if (i != begin && str[i] == str[begin]){
continue;
}
swap(str, i, begin);
permutationAll(str, begin+1, result);
swap(str, i, begin);
}
}
}
public void swap(char[] str, int a, int b){
char temp;
temp = str[a];
str[a] = str[b];
str[b] = temp;
}
}