程序员面试金典---10
三步问题
思路:
通过题意很明显就是动态规划问题,而且本问题很简单(是两步楼梯的进阶版),构造动态转换方程为:
解释一下:在第
i
层楼梯,到达这一层的方式可以从第i-1
层上来,也可以在i-2
层上来,也可以从i-3
上来,因此相加即可。初始状态:
dp[0]=0,dp[1]=1,dp[2]=2,dp[3]=4
/** * @param {number} n * @return {number} */ var waysToStep = function(n) { let dp = [n + 1]; dp[0] = 0 dp[1] = 1 dp[2] = 2 dp[3] = 4 for(let i = 4; i <= n; i++){ dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3] dp[i] = dp[i] % 1000000007 } return dp[n] % 1000000007 };
迷路的机器人
思路:
使用深度优先搜索进行解决,递归求解
递归出口:
/** * @param {number[][]} obstacleGrid * @return {number[][]} */ var pathWithObstacles = function(obstacleGrid) { const m = obstacleGrid.length, n = obstacleGrid[0].length; let res = [] // 标记是否成功 let flag = false // 递归函数 const dfs = function(x, y, obstacleGrid){ // 出口 if(x < 0 || x >= m || y >= n || obstacleGrid[x][y] === 1) return // 加入结果 res.push([x, y]) // 标记已读 obstacleGrid[x][y] = 1 // 终点 if(x === m - 1 && y === n - 1) flag = true // 向右走 if(!flag) dfs(x + 1, y, obstacleGrid) // 向左走 if(!flag) dfs(x, y + 1, obstacleGrid) // 结果删除 if(!flag) res.pop() } // 开始 dfs(0, 0, obstacleGrid) return res };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南