题目说明
示例
1 2
| 输入:s = "abc" 输出:["abc","acb","bac","bca","cab","cba"]
|
笔者理解
此题是一道DFS算法问题,在力扣题库中被定义为中等题。
解法
当笔者阅读完此题后,发现此题是比较经典的DFS题目,让我们来看看具体如何实现的吧。
实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| class Solution {
List<String> list;
public String[] permutation(String s) { int size = s.length();
list = new ArrayList<String>();
char[] ch = s.toCharArray();
dfs(ch, 0);
return list.toArray(new String[list.size()]); }
public void dfs(char[] ch, int tick) { if (tick == ch.length) { list.add(new String(ch)); return; }
for (int i = tick; i < ch.length; i++) { boolean temp = true; for (int j = tick; j < i; j++) { if (ch[i] == ch[j]) { temp = false; } } if (temp) { char tempCh = ch[tick]; ch[tick] = ch[i]; ch[i] = tempCh;
dfs(ch, tick + 1);
tempCh = ch[tick]; ch[tick] = ch[i]; ch[i] = tempCh; } } } }
|
时间效率和空间效率都还行,可见此解法还比较适合此题;

总结
本题是今天的每日一题,难度是为中等,感兴趣的朋友都可以去尝试一下,此题还有其他更多的解法,朋友们可以自己逐一尝试。