标签:func 重复 turn ram pop style 个数 没有 als
题目描述
输入一个字符串,打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。
(PS:字符串中可能有重复元素)
思路
每次遍历一遍整个数组,选择一个还没有被排列的字母。由于给定字符串中可能含有重复字母,应当用Set来存储排列序列,避免重复。
s为给定字符串,used数组记录使用过的字母,cur记录当前排列的序列,res为最终返回的集合(Set):
递归退出条件:cur数组长度与s相同,将cur加入res,返回上一层递归。
递推工作:
代码:
/** * @param {string} s * @return {string[]} */ var permutation = function(s) { if(!s.length) return [""]; const len = s.length; let cur = []; let used = []; let res = new Set(); dfs(); return Array.from(res); function dfs(){ if(cur.length === len){ res.add(cur.join(‘‘)); return; } for(let i = 0; i < len; i++){ if(used[i]) continue; used[i] = true; cur.push(s.charAt(i)); dfs(); cur.pop(); used[i] = false; } } };
易错:
标签:func 重复 turn ram pop style 个数 没有 als
原文地址:https://www.cnblogs.com/xintangchn/p/13202076.html