程序员面试金典---13
无重复字符全排列
思路:
使用回溯进行解决。
主要是定义一个
backRound
函数,表示回溯。注意回溯出口:就是长度等于S的长度,且没有存储。
代码:
var permutation = function(S) { // 定义函数 permutation,接收字符串 S 作为参数 let res = [] // 初始化一个存储全排列结果的数组 function backRound(path, selectList){ // 定义回溯函数 backRound,接收当前已选择的字符序列 path 和剩余可选字符列表 selectList 作为参数 if(path.length === S.length){ // 当当前字符序列长度等于 S 的长度时,说明已经选择完毕 if(res.indexOf(path) === -1){ // 如果该结果没有被存储过,则将其存入结果数组中 res.push(path) } return // 结束递归 } for(let i = 0; i < selectList.length; i++){ // 遍历剩余可选字符列表 path += selectList[i] // 将当前字符添加到已选择的字符序列中 backRound(path, selectList.slice(0, i) + selectList.slice(i + 1)) // 递归调用回溯函数,传入更新后的 path 和 selectList path = path.slice(0, path.length - 1) // 将添加的字符从 path 中删除,继续遍历下一个字符 } } backRound('', S) // 初始化回溯函数,并开始搜索全排列结果 return res // 返回存储所有全排列结果的数组 };
有重复字符串的全排列
思路:
和上题一样的思路:
/** * @param {string} S * @return {string[]} */ var permutation = function(S) { let res = [] function backRound(path, selectionList){ if(path.length === S.length){ if(res.indexOf(path) === -1){ res.push(path) } return } for(let i = 0; i < selectionList.length; i++){ path += selectionList[i] backRound(path, selectionList.slice(0, i) + selectionList.slice(i + 1)) path = path.slice(0, path.length - 1) } } backRound('', S) return res };
括号
思路:
递归搜索:
var generateParenthesis = function(n) { //定义一个函数,生成有效括号组合,参数为 n let res = []; // 定义结果数组用于存储最终的结果 dfs(n, n, '', res); //调用dfs函数进行深度优先搜索,并将结果存到res中 return res; //返回结果数组 }; function dfs(m, n, output, res) { //定义一个深度优先搜索算法的递归函数,传入参数 m、n、output和res if(m > n || m < 0 || n < 0) return; // 当左括号数量大于右括号数量或者不足时直接返回 if(m === 0 && n === 0) res.push(output); //当左右括号的数量都等于零时将当前结果字符串推入结果数组res dfs(m - 1, n, output + '(', res); // 继续递归调用dfs函数,左括号的数量减一之后加入左括号 dfs(m, n - 1, output + ')', res); // 继续递归调用dfs函数,右括号的数量减一之后加入右括号 }
分类:
力扣-程序员面试金典题目整理
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!