列表

详情


剑指 Offer 38. 字符串的排列

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

 

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

 

示例:

输入:s = "abc"
输出:["abc","acb","bac","bca","cab","cba"]

 

限制:

1 <= s 的长度 <= 8

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: vector<string> permutation(string s) { } };

golang 解法, 执行用时: 48 ms, 内存消耗: 7.6 MB, 提交时间: 2021-06-22 14:48:05

func permutation(s string) []string {
	var ans []string
	backtrack_unique(0, []byte(s), &ans)
	return ans
}

func backtrack_unique(k int, list []byte, ans *[]string) {
	if k == len(list) {
		*ans = append(*ans, string(list))
		return
	}
	hash := map[byte]struct{}{}
	for i := k; i < len(list); i++ {
		if _, ok := hash[list[i]]; ok {
			continue
		}
		hash[list[i]] = struct{}{}
		list[i], list[k] = list[k], list[i]
		backtrack_unique(k+1, list, ans)
		list[i], list[k] = list[k], list[i]
	}
}

上一题