Given a string with no duplicate characters, return a list with all permutations of the characters.
Assume that input string is not null.
Examples
Set = “abc”, all permutations are [“abc”, “acb”, “bac”, “bca”, “cab”, “cba”]
Set = "", all permutations are [""]
总体思路都适用DFS完成,但有两种搜索方法。
DFS基本方法:
1. How many levels in the recursion tree? what does it store on each level? (每层代表什么意义?讲题之前就知道DFS要recurse多少层)
2. How many different states should we try to put on each level?(每层有多少个状态/case 需要try?)
方法一:用swap的方法完成。
层数代表位置:level 0: level 1: level 2 = pos 0:pos 1: pos 2 = a:b:c。换层也表示换位置。
实际保存结果的路径是,将最左支路return,再返回到ABC,然后再沿路生成ACB,再打印BAC......
public class Solution {
public List<String> permutations(String input) {
//base case
char[] str = input.toCharArray();
List<String> result = new ArrayList<>();
permutations(str, 0, result);
return result;
}
public void permutations(char[] input, int index, List<String> result) {
if(index == input.length) {
result.add(new String(input));
// System.out.println(input);
return;
}
for(int i = index; i < input.length; i++) {
swap(input, i, index);
permutations(input, index + 1, result);
swap(input, i, index);
}
}
private void swap(char[] array, int left, int right) {
char temp = array[left];
array[left] = array[right];
array[right] = temp;
}
}