mirror of
https://github.com/CyC2018/Interview-Notebook.git
synced 2026-10-31 11:05:36 +00:00
Update 38. 字符串的排列.md
补充回溯法生成全排列及排序去重的思路说明,并补充去重递归树配图。
This commit is contained in:
@@ -8,6 +8,12 @@
|
||||
|
||||
## 解题思路
|
||||
|
||||
用回溯生成排列:每一层从还没用过的字符中选一个接到 s 后面,s 的长度等于字符串长度时得到一个排列,返回后撤销这次选择,再试下一个字符。
|
||||
|
||||
字符串可能有重复字符,例如 aab 中两个 a 交换位置得到的是同一个排列,直接回溯会输出重复的结果。先排序让相同的字符相邻,再规定相同的字符只能按从左到右的顺序使用:chars[i] 等于 chars[i - 1] 而 chars[i - 1] 还没被使用时,跳过 chars[i]。这样 aab 只生成 aab、aba、baa 各一次。排序后按顺序选字符,输出也就是字典序。
|
||||
|
||||
<div align="center"> <img src="pics/offer38-dedup-tree.png" width="600px"/> </div><br>
|
||||
|
||||
```java
|
||||
private List<String> ret = new ArrayList<>();
|
||||
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 100 KiB |
Reference in New Issue
Block a user