LeetCode 剑指 Offer 38. 字符串的排列 (回溯)

tech2022-10-23  114

Description

输入一个字符串,打印出该字符串中字符的所有排列。

你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。

示例: 输入:s = "abc" 输出:["abc","acb","bac","bca","cab","cba"] 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/zi-fu-chuan-de-pai-lie-lcof 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

Solution

注意排除使用过的元素的两种方法的区别:

nums[i] in track:适用于nums[i]元素在后序的回溯中还会用到,只是在本次回溯中不会再次使用,比如排列问题用到这个方法。backtrack(nums[i+1:], track):适用于nums[i]这个元素在后序的回溯中也不会出现,比如494. 目标和、39. 组合总和会用到这个方法。 class Solution: def permutation(self, s: str) -> List[str]: res = [] def backtrack(track): if len(track) == len(s): res.append(track) return for i in range(len(s)): # 排除已经出现过的元素 if s[i] in track: continue track += s[i] backtrack(track) track = track[:-1] backtrack('') return res
最新回复(0)