当前位置: 首页 > news >正文

建设工程信息查询哪个网站好个人博客手机网站模板

建设工程信息查询哪个网站好,个人博客手机网站模板,中国十大云计算公司排名,互联网网站如何做流量统计62 不同路径 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径&#…

62 不同路径

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。

问总共有多少条不同的路径?

示例 1:

  • 输入:m = 3, n = 7
  • 输出:28

示例 2:

  • 输入:m = 2, n = 3
  • 输出:3

解释: 从左上角开始,总共有 3 条路径可以到达右下角。

  1. 向右 -> 向右 -> 向下
  2. 向右 -> 向下 -> 向右
  3. 向下 -> 向右 -> 向右

本题用动态规划五部曲进行分析:首先dp数组的含义是到达这个点有多少种走法,这里题目已经给了按时,递推方程为左边的走法加上面的走法,即dp[i][j] = dp[i - 1][j] + dp[i][j - 1]; 初始条件为左边界和上边界都初始为1,选择两个边界是因为只有通过这样才能让后面的dp数组有值,选择1是因为每次走到那里都是一种走法;遍历顺序为从前往后依次遍历,最后打印dp数组:

class Solution {
public:int uniquePaths(int m, int n) {vector<vector<int>> dp(m, vector<int>(n, 0));for (int i = 0; i < m; i++) dp[i][0] = 1;for (int j = 0; j < n; j++) dp[0][j] = 1;for (int i = 1; i < m; i++) {for (int j = 1; j < n; j++) {dp[i][j] = dp[i - 1][j] + dp[i][j - 1];}}return dp[m - 1][n - 1];}
};

 63 不同路径II

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。

现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?

本题相比于上一题,主要就是添加了障碍,如果障碍在起始或者终止位置,直接返回0即可,如果在左边界和上边界,障碍和后面的所有dp都设为0即可,在网格中,一旦遇到了障碍,就跳过他:

class Solution {
public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {int m = obstacleGrid.size();int n = obstacleGrid[0].size();if (obstacleGrid[m - 1][n - 1] == 1 || obstacleGrid[0][0] == 1) //如果在起点或终点出现了障碍,直接返回0return 0;vector<vector<int>> dp(m, vector<int>(n, 0));for (int i = 0; i < m && obstacleGrid[i][0] == 0; i++) dp[i][0] = 1;for (int j = 0; j < n && obstacleGrid[0][j] == 0; j++) dp[0][j] = 1;for (int i = 1; i < m; i++) {for (int j = 1; j < n; j++) {if (obstacleGrid[i][j] == 1) continue;dp[i][j] = dp[i - 1][j] + dp[i][j - 1];}}return dp[m - 1][n - 1];}
};

343 整数拆分

给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。

递归五部曲:首先dp数组表示的就是最大乘积,递推公式为dp[i]=max(dp[i], max((i-j)*j,dp[i-j]*j));

初始条件只能从2开始取,拆分以后最大乘积为1,遍历顺序从前到后:

class Solution {
public:int integerBreak(int n) {vector<int> dp(n + 1);dp[2] = 1;for (int i = 3; i <= n ; i++) {for (int j = 1; j <= i / 2; j++) {dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j));}}return dp[n];}
};

96 不同的二叉搜索树

给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?

        本题经过测试发现,后面的搜索树的数量和前面的搜索树的数量是有关系的,因为这是一个二叉搜索树,

在上面的分析中,其实已经看出其递推关系, dp[i] += dp[以j为头结点左子树节点数量] * dp[以j为头结点右子树节点数量]

j相当于是头结点的元素,从1遍历到i为止。

所以递推公式:dp[i] += dp[j - 1] * dp[i - j]; ,j-1 为j为头结点左子树节点数量,i-j 为以j为头结点右子树节点数量

class Solution {
public:int numTrees(int n) {vector<int> dp(n + 1);dp[0] = 1;for (int i = 1; i <= n; i++) {for (int j = 1; j <= i; j++) {dp[i] += dp[j - 1] * dp[i - j];}}return dp[n];}
};

 

http://www.yayakq.cn/news/525043/

相关文章:

  • 网站维护包括哪些内容专业的高密做网站的
  • as3.0网站制作教程旧域名新网站
  • 网站上的视频直播是怎么做的呢免费广告投放网站
  • 网页设计与制作教程素材百家号seo
  • 花钱做网站要多少钱网站开发结语
  • 个人网站有自己服务器是不是就不需要虚拟主机wordpress公式编辑器
  • 做视频大赛推广的网站做网站 域名 网站 空间
  • 网站开发技术包括中国电信软件开发工程师待遇
  • asp网站后台密码破解国外做的比较好的网站有哪些
  • 福建省建设人才与科技发展中心网站首页ps怎样做网站设计
  • 高端网站建设 司法关于文化的网站模板
  • 有没有免费建站幼教机构网站开发设计论文
  • 沃尔玛的网站建设永康网站建设服务
  • 重庆网站建设 狐灵科技wordpress 修改代码
  • WordPress rss连接博客网站seo
  • 涡阳网站建设中国发达国家
  • 长沙网站制作培训基地成华区微信网站建设公司
  • 成都学校网站建点击app图标进入网站怎么做
  • wordpress共用用户多站点1个空间做两个网站
  • 海外域名提示风险网站吗好听的网站名称
  • 低价网站建设多少钱哈尔滨网站建设模板
  • 牙科网站开发wordpress数据名
  • 厦门it做网站最强建设银行 钓鱼网站
  • 贵州交通建设集团有限公司网站网站设计公司名称
  • 苏州网站设计公司兴田德润怎么样wordpress注册邮箱收不到
  • 网站做cdn需要注意什么意思wordpress 虚拟数据
  • 如何查询网站备案石家庄软件开发公司有几家
  • 上海网站建设公司网网站费用明细
  • 做网站后期续费是怎么算的如何更改WordPress登录密码
  • 传奇类网页游戏广州网站优化工具