Update 38. 字符串的排列.md

补充回溯法生成全排列及排序去重的思路说明,并补充去重递归树配图。
This commit is contained in:
CyC2018
2026-10-30 20:18:02 +08:00
parent eb61ade6b5
commit e0ad1a6dfa
2 changed files with 6 additions and 0 deletions
+6
View File
@@ -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