程序员面试金典---10

三步问题

思路:

通过题意很明显就是动态规划问题,而且本问题很简单(是两步楼梯的进阶版),构造动态转换方程为:

dp[i]=d[i1]+dp[i2]+dp[i3]

解释一下:在第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
};
posted @   楸枰~  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示