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

LeetCode Hot100(多维动态规划)

62. 不同路径

比较板子的dp,实际上就是到达一个点有两种方式,从上面来或者是左边,加起来就可以了

class Solution {public int uniquePaths(int m, int n) {int [][]arr = new int[m+2][n+2];arr[1][1]=1;for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){if(i==1&&j==1){continue;}arr[i][j]+=arr[i-1][j]+arr[i][j-1];}}return arr[m][n];}
}

64. 最小路径和

跟上一题一样,该题取一下最小值即可

class Solution {public int minPathSum(int[][] grid) {if(grid.length==0){return 0;}for(int i=0;i<grid.length ; i ++){for(int j=0;j<grid[i].length;j++){if(i>0&&j>0){grid[i][j]+=Math.min(grid[i-1][j],grid[i][j-1]);}else if(i==0){if(j>0){grid[i][j]+=grid[i][j-1];}}else if(j==0){if(i>0){grid[i][j]+=grid[i-1][j];}}}}return grid[grid.length-1][grid[grid.length-1].length-1];}
}

5. 最长回文子串

这边直接采取的暴力的做法,枚举每一个字符串,看看是不是回文的即可

class Solution {public static String longestPalindrome(String s) {int wei=0;int len=1;char []arr=s.toCharArray();for(int i=0;i<arr.length;i++){for(int j=i;j<arr.length;j++){int f=(j-i);int mark=0;for(int p=0;p<=f;p++){if(arr[i+p]!=arr[j-p]){mark=1;break;}}if(mark==0){if(j-i+1>=len){len=j-i+1;wei=i;}}}}String s2=s.substring(wei,wei+len);return s2;}
}

1143. 最长公共子序列

也算是比较板子的dp了,我们设dp[i][j]为以i和j为结尾的最长子序列,它实际上有两种可能,一个是i和j对应的字符相等,那么直接就是i-1,j-1加1即可,如果不同,就是i-1,j,或者i,j-1转移过来即可

class Solution {public static void main(String[] args) {longestCommonSubsequence("abcde","ace");}public static int longestCommonSubsequence(String text1, String text2) {int len=0;char []s2=text2.toCharArray();char []s1=text1.toCharArray();int [][]dp=new int[text1.length()][text2.length()];int maxx=0;for(int i=0;i<s1.length;i++){for(int j=0;j<s2.length;j++){if(s1[i]==s2[j]){if(i>=1&&j>=1){dp[i][j]=Math.max(dp[i-1][j-1]+1,dp[i][j]);}else{dp[i][j]=1;}}else{if(i>=1){dp[i][j]=Math.max(dp[i-1][j],dp[i][j]);}if(j>=1){dp[i][j]=Math.max(dp[i][j-1],dp[i][j]);}}maxx=Math.max(dp[i][j],maxx);}}return maxx;}}

72. 编辑距离

与上一题几乎一致,看一下代码即可

import java.util.*;import static java.util.Collections.reverse;public class Main {public static void main(String[] args) {minDistance("abcde","ace");}public static int minDistance(String word1, String word2) {int len1 = word1.length(), len2 = word2.length();int[][] dp = new int[len1 + 1][len2 + 1];for (int i = 0; i < len1; i++)dp[i + 1][0] = i + 1;for (int i = 0; i < len2; i++)dp[0][i + 1] = i + 1;for (int i = 0; i < len1; i++) {for (int j = 0; j < len2; j++) {dp[i + 1][j + 1] = word1.charAt(i) == word2.charAt(j) ? dp[i][j]: Math.min(Math.min(dp[i][j + 1], dp[i + 1][j]), dp[i][j]) + 1;}}return dp[len1][len2];}}

http://www.xdnf.cn/news/9796.html

相关文章:

  • vmware虚拟机固定IP
  • const 用法总结
  • TortoiseSVN账号切换
  • 动态规划-152.乘积最大子数组-力扣(LeetCode)
  • Python训练营打卡 Day38
  • 信奥赛-刷题笔记-二分篇-T2-P1918保龄球0529
  • 纵览网丨新视角下的黑洞探索:传统奇点理论的挑战与未来观测的可能性
  • 进程控制与调度下
  • React 编译器 RC
  • Typescript学习教程,从入门到精通,TypeScript 泛型与类型操作详解(二)(17)
  • 数字取证-E01转vmdk
  • 区间DP概述(JAVA)
  • 若依框架 账户管理 用户分配界面解读
  • 纤维组织效应偏斜如何影响您的高速设计
  • 资产生命周期管理:动态监控 + 精准管理
  • 爬虫框架:scrapy使用心得
  • PABD 2025:大数据与智慧城市管理的融合之道
  • 数字孪生技术赋能西门子安贝格工厂:全球智能制造标杆的数字化重构实践
  • Linux -- 进程地址空间
  • 高速连接器设计的真相
  • $3 #12阶段三小结Java se
  • 【经验】Ubuntu中设置terminator的滚动行数、从Virtualbox复制到Windows时每行后多一空行
  • android studio debug调试出现 IOException异常
  • 智能厨房系统—御控物联网IoT平台
  • UniApp微信小程序自定义导航栏实现
  • vite导入优化插件vite-plugin-importer
  • 华为OD机试真题——报文回路(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • 【ConvLSTM第一期】ConvLSTM原理
  • 回文数-leetCode-009
  • [Java恶补day10] 560. 和为K的子数组