首页 > 编程语言 >程序员面试金典---10

程序员面试金典---10

时间:2023-04-19 21:11:35浏览次数:35  
标签:10 obstacleGrid return 金典 number dfs --- flag dp

三步问题

思路:

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

\[dp[i] = d[i - 1]+dp[i-2]+dp[i-3] \]

解释一下:在第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
};

标签:10,obstacleGrid,return,金典,number,dfs,---,flag,dp
From: https://www.cnblogs.com/dgqp/p/17334646.html

相关文章

  • 软考中级(系统集成项目管理工程师)高频考点-群体决策
    软考中级(系统集成项目管理工程师)高频考点-群体决策群体决策就是为达成某种期望结果而对多个未来行动方案进行评估。群体决策技术可用来开发产品需求,以及对产品需求进行归类和优先排序。一致同意所有人都同意某个行动方案。大多数原则获得群体中50%以上的人的支持,就能做出......
  • python+playwright 学习-49 pytest-xdist 多进程执行用例
    前言在实际工作中项目下的web自动化用例非常多,单进程执行会消耗很长的运行时间,可能运行一次用例得几个小时。为了加快用例的运行速度,可以使用pytest-xdist多进程执行用例。但并不是说你写的用例,直接安装插件就能使用,实际使用的过程中还会遇到很多的问题。pytest-xdist多进程执行......
  • odoo 开发入门教程系列-准备一些操作(Action)?
    准备一些操作(Action)?到目前为止,我们主要通过声明字段和视图来构建模块。在任何真实的业务场景中,我们都希望将一些业务逻辑链接到操作按钮。在我们的房地产示例中,我们希望能够:取消或将房产设置为已售出接受或拒绝报价有人可能会说,我们已经可以通过手动更改状态来完成这些事情,但这并......
  • 力扣---1043. 分隔数组以得到最大和
     给你一个整数数组arr,请你将该数组分隔为长度最多为k的一些(连续)子数组。分隔完成后,每个子数组的中的所有值都会变为该子数组中的最大值。返回将数组分隔变换后能够得到的元素最大和。本题所用到的测试用例会确保答案是一个32位整数。 示例1:输入:arr=[1,15,7,9,2......
  • 扎实打牢数据结构算法根基,从此不怕算法面试系列之008 week01 02-08 通过常见算法,对常
    1、线性查找法的复杂度publicstatic<E>intsearch(E[]data,Etarget){for(inti=0;i<data.length;i++)if(data[i].equals(target))returni;return-1;}很容易看出,这个算法的复杂度为O(n)。2、一个数组中的元素可以两两组成......
  • 中!新一代【WRITE-BUG】数字空间,好使!
    【WRITE-BUG】数字空间是一个为大学生提供知识管理和交流的平台,提供了多种实用的功能。该平台的界面设计符合大学生的审美,功能也非常完备。数字空间的主要功能包括聊天大厅、云文档、云批注笔记、代码仓库以及代码质量评估系统等。作为数字空间的用户,我非常喜欢这个平台提供的聊......
  • 2023-04-19:给定一个非负数组arr 任何两个数差值的绝对值,如果arr中没有,都要加入到arr里
    2023-04-19:给定一个非负数组arr任何两个数差值的绝对值,如果arr中没有,都要加入到arr里然后新的arr继续,任何两个数差值的绝对值,如果arr中没有,都要加入到arr里一直到arr大小固定。请问最终arr长度是多少。1<=arr的长度<=10^50<=arr的数值<=10^5来自国外题目论坛。答......
  • Bootstrap模板-使用现成的免费完善模板制作网页
    Bootstrap有一系列现成的免费而优秀的模板,我们可以用于制作前端页面稍加改进就是一个美观的页面 模板代码(源自purpleTemplate):<!DOCTYPEhtml><htmllang="en"><head><metacharset="utf-8"><metaname="viewport"content="width=devi......
  • 关于shell变量值的截取-通过分隔符-去除前后匹配到的内容
    最近在工作中需要取一个变量的一部分值,举例说明,先看一个变量及值的格式,如Server="1.1.1.1-server01"我们可以通过各种支持切片的命令得到server01这一段,如cut,sed,awk等等命令其实当熟悉shell编程的可以知道,shell内部的变量处理方式也是可以得到的,可以通过echo${Server#*-}的......
  • GYM104081 部分题解
    比赛链接:https://codeforces.com/gym/104081目前就做了8题,里面还有4个水题……水题:ACEG,模拟题意即可,C和E有一些细节。不想写题解了F首先目标是如何将这9个数分组,由于答案一定存在,考虑随机化,固定\(a_1\inS_1\),然后随机一个\(a_i\inS_1\),异或得到\(S_1\)的另一......