[代码随想录Day34打卡] 62.不同路径 63. 不同路径 II 343. 整数拆分 (可跳过)96.不同的二叉搜索树 (可跳过)

62.不同路径

和上楼梯相同,机器人只可以向右向下移动。所以在位置[i,j]有两种情况,一种从[i-1, j]向右移动到达当前位置,或者从[i, j-1]向下移动到当前位置。所以到达当前位置的方法数量就等于到达[i, j-1]和到达[i-1, j]的方法数量的和。
简单~
二维dp数组

  1. dp数组及下标含义: dp[i][j]表示从[0,0]到达[i,j]的方法数量
  2. 递推公式:dp[i][j] = dp[i-1][j] + dp[i][j-1]
  3. dp数组如何初始化:dp[][0]和dp[0][]都初始化为1,最上面那一行的位置只有一种方式就是从[0,0]一直向左移动,最左边那一列位置到达方式只有一种方式就是从[0,0]一直向下移动。
  4. 遍历顺序:从上往下,从左往右
  5. 打印dp数组
class Solution {
public:int uniquePaths(int m, int n) {if(m == 1 || n== 1) return 1;vector<vector<int>> dp(m, vector<int>(n));for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){if(i==0 || j==0){dp[i][j] = 1;//dp数组初始化} else{dp[i][j] = dp[i-1][j]+dp[i][j-1];}}}return dp[m-1][n-1];}
};
class Solution {public int uniquePaths(int m, int n) {if(m == 1 || n == 1){return 1;}else{int[][] dp = new int[m][n];for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){if(i==0 || j ==0){dp[i][j] = 1;}else{dp[i][j] = dp[i-1][j]+dp[i][j-1];}}}return dp[m-1][n-1];}}
}
class Solution(object):def uniquePaths(self, m, n):""":type m: int:type n: int:rtype: int"""if m == 1 or n == 1:return 1dp = [[0]*n]*mfor i in range(m):for j in range(n):if i == 0 or j == 0:dp[i][j] = 1else:dp[i][j] = dp[i-1][j] + dp[i][j-1]return dp[m-1][n-1]

参考文章

  1. https://programmercarl.com/0062.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE%84.html

63. 不同路径 II

和不同路径相同。就是初始化和递推公式需要改变一下。
NOTE:如果[0,0]或者[m, n]处有障碍物直接返回0。
二维dp数组

  1. dp数组及下标含义: dp[i][j]表示从[0,0]到达[i,j]的方法数量
  2. 递推公式:加个条件语句if obj[i][0]==0: dp[i][j] = dp[i-1][j] + dp[i][j-1] else: dp[i][j]=0
  3. dp数组如何初始化:遍历进行初始化第一行for(int i =0; i < m && obj[i][0]==0; i++) dp[i][0]=1//如果遇到障碍物就无法向右移动,后面的方法数都为0,第一列同理。
  4. 遍历顺序:从上往下,从左往右
  5. 打印dp数组
class Solution {
public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {int m = obstacleGrid.size();int n = obstacleGrid[0].size();if(obstacleGrid[0][0]==1 || obstacleGrid[m-1][n-1]==1) return 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] == 0) dp[i][j] = dp[i-1][j] + dp[i][j-1];}}return dp[m-1][n-1];// int m = obstacleGrid.size();// int n = obstacleGrid[0].size();// if(obstacleGrid[0][0]==1 || obstacleGrid[m-1][n-1]==1) return 0;// vector<vector<int>> dp(m, vector<int>(n, 0));// for(int j = 0; j < n; j++){//     if(obstacleGrid[0][j]==1) break;//     else dp[0][j] = 1;// }// for(int i = 0; i < m; i++){//     if(obstacleGrid[i][0]==1) break;//     else dp[i][0] = 1;// }// for(int i = 1; i < m; i++){//     for(int j = 1; j < n; j++){//         if(obstacleGrid[i][j]==0){//             dp[i][j] = dp[i-1][j] + dp[i][j-1];//         }//     }// }// return dp[m-1][n-1];}
};
class Solution {public int uniquePathsWithObstacles(int[][] obstacleGrid) {int m = obstacleGrid.length;int n = obstacleGrid[0].length;if(obstacleGrid[0][0]==1 || obstacleGrid[m-1][n-1]==1) return 0;int[][] dp = new int[m][n];//初始化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] == 0){dp[i][j] = dp[i-1][j] + dp[i][j-1];}else dp[i][j] = 0;}}return dp[m-1][n-1];}
}
class Solution(object):def uniquePathsWithObstacles(self, obstacleGrid):""":type obstacleGrid: List[List[int]]:rtype: int"""m = len(obstacleGrid)n = len(obstacleGrid[0])if(obstacleGrid[0][0] == 1 or obstacleGrid[m-1][n-1] == 1):return 0dp = [[0] * n for _ in range(m)]#注意这个初始化for i in range(m):if(obstacleGrid[i][0]==1):breakdp[i][0] = 1for j in range(n):if(obstacleGrid[0][j]==1):breakdp[0][j] = 1for i in range(1, m):for j in range(1, n):if obstacleGrid[i][j] == 1:dp[i][j] = 0else:dp[i][j] = dp[i-1][j] + dp[i][j-1]return dp[m-1][n-1]

参考文章

  1. https://programmercarl.com/0063.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE%84II.html

343. 整数拆分 (可跳过)

  1. dp数组及下标含义: dp[i]对i进行拆分,拆分之后得到的最大乘积为dp[i]
  2. 递推公式:从0到i/2(可以取到,因为拆分一个数我们比较的是dp[i],j*(i-j)和jdp[i-j]就是对i-j进一步拆分。其中j(i-j)是中间对称的,然后jdp[i-j]中dp[i-j]包含i-j小的拆分方式)遍历j,dp[i] = max(j(i-j), j*dp[i-j],dp[i]。求不同数据拆分方式下的最大乘积所以遍历j的时候要保存dp[i]当前最大值。
  3. dp数组如何初始化:0,1无法拆分没有意义都初始化为0,dp[2]=1
  4. 遍历顺序:从前往后
  5. 打印dp数组
class Solution {
public:int integerBreak(int n) {vector<int> dp(n+1);dp[0] = 0; dp[1] = 0; dp[2] = 1;//初始化for(int i = 3; i <= n; i++){for(int j = 1; j <= i/2; j++){//注意这里有等于dp[i] = max(dp[i], max(j*dp[i-j], j*(i-j)));//求的dp[i]最大值在j循环的时候要保存其中最大值}}return dp[n];}
};
class Solution {public int integerBreak(int n) {int[] dp = new int[n+1];dp[0] = 0; dp[1] = 0; dp[2] = 1;//dp数组初始化for(int i = 3; i <= n; i++){for(int j = 1; j <= i/2; j++){dp[i] = Math.max( dp[i] , Math.max(j*(i-j), j*dp[i-j]));}}return dp[n];}
}
class Solution(object):def integerBreak(self, n):""":type n: int:rtype: int"""dp = [0]*(n+1)#dp数组初始化dp[0] = 0 dp[1] = 0dp[2] = 1for i in range(3, n+1):for j in range(1, i/2+1):dp[i] = max(dp[i], max(j*(i-j), j*dp[i-j]))return dp[n]

参考文章

  1. https://www.programmercarl.com/0343.%E6%95%B4%E6%95%B0%E6%8B%86%E5%88%86.html

96.不同的二叉搜索树 (可跳过)

不同二叉搜索树,固定头节点,二叉搜索树就是左子树的肿瘤*右子树的种类。对于给定n个节点,可以组成的二叉搜索树的种类就是这n个节点分别做头节点时候的可组成的二叉搜索树的种类的和。

  1. dp数组及下标含义: 给定i个节点有dp[i]种二叉搜索树。
  2. 递推公式:从0到i遍历j, dp[i]+=dp[j-1]*dp[i-j]
  3. dp数组如何初始化:dp[0]=1
  4. 遍历顺序:从小到大。
  5. 打印dp数组
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];}
};
class Solution {public int numTrees(int n) {int[] dp = new int[n+1];//dp数组初始化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];}
}
class Solution(object):def numTrees(self, n):""":type n: int:rtype: int"""dp = [0]*(n+1)dp[0] = 1for i in range(1, n+1):for j in range(1, i+1):dp[i] += dp[j-1]*dp[i-j]return dp[n]

参考文章

  1. https://www.programmercarl.com/0096.%E4%B8%8D%E5%90%8C%E7%9A%84%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/889235.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

输入url到显示主页的详细过程

从浏览器地址输入url到显示主页的过程&#xff1f; 主要分为&#xff1a;DNS解析&#xff0c;TCP连接&#xff0c;发送HTTP请求&#xff0c;服务器处理请求&#xff0c;浏览器接收HTTP响应&#xff0c;断开连接 DNS解析&#xff1a; 浏览器发起一个DNS请求到DNS服务器&#…

使用C#通过ColorMatrix对象为图像重新着色

此示例产生了一些令人印象深刻的结果&#xff0c;但实际上非常简单。 它使用其他几个示例演示的 ImageAttribute 技术来快速操作图像的颜色。 下面的AdjustColor方法启动图像着色的过程。 // Adjust the images colors. private Image AdjustColor(Image image) {// Make the …

手机租赁系统开发全流程解析与实用指南

内容概要 在如今快速发展的科技时代&#xff0c;手机租赁系统已经成为一种新兴的商业模式&#xff0c;非常符合当下市场需求。那么&#xff0c;在开发这样一个系统的时候&#xff0c;首先要从需求分析和市场调研开始。在这一阶段&#xff0c;你需要了解用户需要什么&#xff0…

unity打包web,如何减小文件体积,特别是 Build.wasm.gz

unity打包WebGL&#xff0c;使用的是wasw&#xff0c;最终生成的Build.wasm.gz体积很大&#xff0c;有6.5M&#xff0c;有几个方法可以稍微减小这个文件的大小 1. 裁剪引擎代码&#xff1a; 此步可将大小从6.5减小到 6.2&#xff08;此项默认开启&#xff0c;只是改了裁剪等级…

字符集编码

由于计算机只能存储和处理二进制的“0”和“1”&#xff0c;无法处理其他的字母、数字和符号&#xff0c;所以就需要有某种东西来达到类似桥梁的作用——例如图1-7中的ASCII——通过它&#xff0c;人们就可以看懂用计算机表示字母、数字或其他符号。 人们能够想到的最直接的方…

OceanBase 社区版 4.0 离线方式升级bp1至bp2 指南(含避坑总结)

注&#xff1a;目前社区版对 4.0 升级 bp1至 bp2也未有完善的文档&#xff0c;本次升级中也是遇到不少坑&#xff0c;写本文也希望对OB感兴趣的可以尝试少些遇坑。 也希望对升级有更好方式建议方式的朋友一起切磋交流&#xff0c;以便再进一步完善升级方案。 第一次做OB的升级&…

基于SSM框架的社区医院管理系统(计算机毕业设计)+万字说明文档

系统合集跳转 源码获取链接 一、系统环境 运行环境: 最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 IDE环境&#xff1a; Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以 tomcat环境&#xff1a; Tomcat 7.x,8.x,9.x版本均可 操作系统…

视频安防监控平台:Liveweb视频监控管理云平台方案

LiveWeb是深圳市好游科技有限公司开发的一套综合视频汇聚管理平台&#xff0c;可提供多协议&#xff08;RTSP/RTMP/GB28181/海康Ehome/大华&#xff0c;海康SDK等&#xff09;的视频设备接入&#xff0c;支持GB/T28181上下级联&#xff0c;RTSP\RTMP转GB/T28181&#xff0c;云台…

Linux进程概念-详细版(二)

目录 前言&#xff1a; 进程优先级 基本概念 查看系统进程 PRI与NI 查看进程优先级信息 通过top命令更改进程的nice值 通过renice命令更改进程的nice值 四个重要概念 环境变量 基本概念 常见环境变量 查看环境变量的方法 测试PATH 测试HOME 测试SHELL ​编辑 …

前端监控方案sentry整体概览

查看PDF 目****录 1. Sentry介绍 1.1. 编写目的 1.2. 名词定义 2. Sentry监控原理概述 2.1. 常见的性能优化指标及获取方式 2.2. 常见的前端异常及其捕获方式 3. Sentry?整体架构 4. Sentry安装部署 4.1. 前提条件 4.2. 安装 5. Sentry环境配置 5.1. 初始化配置 …

C++11相关知识点

auto、decltype自动类型推导 auto并不代表实际的数据类型&#xff0c;且auto并不是在任何场合下都能推导出变量的实际类型&#xff0c;使用auto必须初始化。 auto 变量名 变量值&#xff1b; 当变量不是指针或引用类型时&#xff0c;推导的结果中不会保留const、volatile关键…

【面试】分布式锁专题

1.你说一下什么是分布式锁 分布式锁是一种在分布式系统环境下实现的锁机制&#xff0c;它主要用于解决&#xff0c;多个分布式节点之间对共享资源的互斥访问问题&#xff0c;确保在分布式系统中&#xff0c;即使存在有多个不同节点上的进程或线程&#xff0c;同一时刻也只有一…

Error relaunching VirtualBox VM process: 5 启动虚拟机时发生了错误

出现错误 一大早起来发现虚拟机打不开&#xff0c;看了虚拟机日志是正常的&#xff0c;还回了个档都不行。 最后我突然想起之前在哪看到过&#xff1a;“完美游戏平台会导致虚拟机的问题。” 解决方法 于是我把完美游戏卸载了&#xff0c;发现&#xff0c;真的&#xf…

MCU、ARM体系结构,单片机基础,单片机操作

计算机基础 计算机的组成 输入设备、输出设备、存储器、运算器、控制器 输入设备&#xff1a;将其他信号转换为计算机可以识别的信号&#xff08;电信号&#xff09;。输出设备&#xff1a;将电信号&#xff08;&#xff10;、&#xff11;&#xff09;转为人或其他设备能理解的…

从零开始:如何在.NET Core Web API中完美配置Swagger文档

目录 新建项目 RestFul Swagger配置 注释展示 版本控制 Token传值 方法封装 新建项目 打开visual studio创建新项目&#xff0c;这里我们选择.net core web api模板&#xff0c;然后输入项目名称及其解决方案创建新项目 这里使用配置一些其他信息&#xff0c;根据自己情…

百度搜索应适用中文域名国家标准,修复中文网址展示BUG

12月1日中文域名国家标准正式实施。该标准“明确了中文域名在编码、解析、注册、字表等方面的技术要求&#xff0c;适用于中文域名注册管理机构、注册服务机构、网络软硬件服务商及终端用户”。 00:23 显然&#xff0c;百度作为网络软硬件服务商&#xff0c;是包括在国家标准的…

Windows安装elasticsearch、Kibana以及IK分词器

一、下载 1.下载elasticsearch 访问官网Download Elasticsearch | Elastic&#xff0c;下载elasticsearch 2.下载 Kibana 访问Download Kibana Free | Get Started Now | Elastic &#xff0c;下载 Kibana 3. IK分词器下载 访问Gitee 极速下载/elasticsearch-analysis-ik选…

第一个C++程序--(蓝桥杯备考版)

第一个C程序 基础程序 #include <iostream>//头⽂件 using namespace std;//使⽤std的名字空间 int main()//main函数 {cout << "hello world!" << endl; //输出&#xff1a;在屏幕打印"hello world!" return 0;}main函数 main 函数是…

Elasticsearch Serverless 中的数据流自动分片

作者&#xff1a;来自 Elastic Andrei Dan 在 Elastic Cloud Serverless 中&#xff0c;我们根据索引负载自动为数据流配置最佳分片数量&#xff0c;从而使用户无需摆弄分片。 传统上&#xff0c;用户会更改数据流的分片配置&#xff0c;以处理各种工作负载并充分利用可用资源。…

TcpServer 服务器优化之后,加了多线程,对心跳包进行优化

TcpServer 服务器优化之后&#xff0c;加了多线程&#xff0c;对心跳包进行优化 TcpServer.h #ifndef TCPSERVER_H #define TCPSERVER_H#include <iostream> #include <winsock2.h> #include <ws2tcpip.h> #include <vector> #include <map> #…