首页 > 编程语言 >【JavaScript】LeetCode:91-95

【JavaScript】LeetCode:91-95

时间:2024-11-15 16:17:59浏览次数:3  
标签:right JavaScript length let 91 word1 95 dp left

文章目录

91 不同路径

在这里插入图片描述

  • 动态规划
  • dp[i][j]:从[0, 0]到[i, j]的路径条数。
  • dp[i][j] = 从[0, 0]到[i, j]上面一格的路径条数 + 从[0, 0]到[i, j]左边一格的路径条数。
  • 初始化:因为第一行的格子只能由左侧格子向右移动到达,第一列的格子只能上面格子向下移动到达,所以第一行和第一列均初始化为1。
/**
 * @param {number} m
 * @param {number} n
 * @return {number}
 */
var uniquePaths = function(m, n) {
    let dp = Array(m).fill(Array(n).fill(0));
    for(let i = 0; i < m; i++){
        dp[i][0] = 1;
    }
    for(let j = 0; j < n; j++){
        dp[0][j] = 1;
    }
    for(let i = 1; i < m; i++){
        for(let j = 1; j < n; j++){
            dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
        }
    }
    return dp[m - 1][n - 1];
};

92 最小路径和

在这里插入图片描述

  • 动态规划
  • dp[i][j]:从[0, 0]到[i, j]的最小路径和。
  • dp[i][j] = min(到[i, j]上面一格的最小路径和, 到[i, j]左边一格的最小路径和) + [i, j]的值。
  • 初始化:第一行为从[0, 0]到[0, j]的累加和,第一列为从[0, 0]到[i, 0]的累加和。
/**
 * @param {number[][]} grid
 * @return {number}
 */
var minPathSum = function(grid) {
    let m = grid.length;
    let n = grid[0].length;
    let dp = Array(m).fill(0).map(() => Array(n).fill(0));
    dp[0][0] = grid[0][0];
    for(let i = 1; i < m; i++){
        dp[i][0] = dp[i - 1][0] + grid[i][0];
    }
    for(let j = 1; j < n; j++){
        dp[0][j] = dp[0][j - 1] + grid[0][j];
    }
    for(let i = 1; i < m; i++){
        for(let j = 1; j < n; j++){
            dp[i][j] = Math.min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];
        }
    }
    return dp[m - 1][n - 1];
};

93 最长回文子串

在这里插入图片描述

  • 中心扩展法
  • 遍历字符串,以每个字符(i)为中心,向左(left)右(right)扩展。
  • 情况一:回文串中的元素个数为奇数,此时left = right = i。
  • 情况二:回文串中的元素个数为偶数,此时left = i,right = i + 1。
  • 不断更新最长回文子串的长度和起始位置。
/**
 * @param {string} s
 * @return {string}
 */
var longestPalindrome = function(s) {
    let res_len = 0;
    let res_start = 0;
    for(let i = 0; i < s.length; i++){
        let left = i;
        let right = i;
        while(left >= 0 && right < s.length && s[left] == s[right]){
            if(right - left + 1 > res_len){
                res_len = right - left + 1;
                res_start = left;
            }
            left--;
            right++;
        }

        left = i;
        right = i + 1;
        while(left >= 0 && right < s.length && s[left] == s[right]){
            if(right - left + 1 > res_len){
                res_len = right - left + 1;
                res_start = left;
            }
            left--;
            right++;
        }
    }
    return s.slice(res_start, res_start + res_len);
};

94 最长公共子序列

在这里插入图片描述

  • 动态规划
  • dp[i][j]:text1[0, i - 1]和text2[0, j - 1]的最长公共子序列的长度。
  • 初始化:第一行和第一列其中一个字符串为空串,最长公共子序列的长度为0,因此初始化为0。
/**
 * @param {string} text1
 * @param {string} text2
 * @return {number}
 */
var longestCommonSubsequence = function(text1, text2) {
    let dp = Array(text1.length + 1).fill(0).map(() => Array(text2.length + 1).fill(0));
    for(let i = 1; i <= text1.length; i++){
        for(let j = 1; j <= text2.length; j++){
            if(text1[i - 1] == text2[j - 1]){
                dp[i][j] = dp[i - 1][j - 1] + 1;
            }else{
                dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
            }
        }
    }
    return dp[text1.length][text2.length];
};

95 编辑距离

在这里插入图片描述

  • 动态规划
  • dp[i][j]:word1[0, i - 1]转换为word2[0, j - 1]的最少操作次数。
  • 若word1[i - 1] != word1[j - 1],则对应三种操作方式:删除、添加和替换。
    删除:word1[0, i - 2]转换为word2[0, j - 1]的最少操作次数 + 1(word1删除word1[i - 1])。
    添加:word1[0, i - 1]转换为word2[0, j - 2]的最少操作次数 + 1(word1添加word2[j - 1])。
    替换:word1[0, i - 2]转换为word2[0, j - 2]的最少操作次数 + 1(word1[i - 1]替换为word2[j - 1])。
  • 初始化:第一行和第一列其中一个字符串为空串,最少操作次数为另一个非空串的元素数,因此初始化为i和j。
/**
 * @param {string} word1
 * @param {string} word2
 * @return {number}
 */
var minDistance = function(word1, word2) {
    let dp = Array(word1.length + 1).fill(0).map(() => Array(word2.length + 1).fill(0));
    for(let i = 0; i <= word1.length; i++){
        dp[i][0] = i;
    }
    for(let j = 0; j <= word2.length; j++){
        dp[0][j] = j;
    }
    for(let i = 1; i <= word1.length; i++){
        for(let j = 1; j <= word2.length; j++){
            if(word1[i - 1] == word2[j - 1]){
                dp[i][j] = dp[i - 1][j - 1];
            }else{
                dp[i][j] = Math.min(Math.min(dp[i - 1][j] + 1, dp[i][j - 1] + 1), dp[i - 1][j - 1] + 1);
            }
        }
    }
    return dp[word1.length][word2.length];
};

标签:right,JavaScript,length,let,91,word1,95,dp,left
From: https://blog.csdn.net/weixin_45980065/article/details/143745317

相关文章

  • 物理学基础精解【195】
    文章目录物理数学微分方程的解微分方程解的分类微分方程解的形式1.**常微分方程的解**2.**偏微分方程的解**特例:经典微分方程的解1.**一阶常微分方程**2.**二阶常微分方程**3.**热传导方程**4.**波动方程**总结积分曲线积分曲线的定义积分曲线的求法1.**一阶微......
  • JavaScript介绍与使用
    1.认识jsjs全称(javascript):是网页上面的一个脚本语言运行执行代码逻辑从而达到我们需要的效果2.JavaScript组成核心语法-ECMAScript:规范了JS的基本语法Es是js的语法规范管理者js是Es的实现操作者DOM=>文档对象提供js操作BOM=>浏览器模型对象提供......
  • JavaScript常用对象方法二:数组(array)
    1.concat()用于连接两个或多个数组。该方法不会改变现有的数组,而是返回一个新的数组。个人感觉es6出来的扩展运算符比这个方法要简洁一些扩展运算符的方法:constarr1=[1,2];constarr2=[3,4];constarr3=[...arr1,...arr2];console.log(arr3);//[1,2,......
  • 【气动学】航天器动力学仿真(考虑大气阻力 轨道下降高度)【含Matlab源码 9105期】
    ......
  • [原创]手把手教学之前端0基础到就业——day11( Javascript )
    文章目录day11(Javascript)01Javascript①Javascript是什么②JavaScript组成③Javascript的书写位置1.行内式(不推荐)2.内部位置使用(内嵌式)3.外部位置使用(外链式)02变量1.什么是变量2.定义变量及赋值3.注意事项4.命名规范03输入和输出1)输出形式1......
  • 检测 HTML5\CSS3\JAVASCRIPT 在浏览器的适应情况
    https://www.cnblogs.com/czhyuwj/p/4796690.html CSS3SelectorsTest:这是CSS3.INFO网站提供的css选择器测试页面,它能够详细显示当前浏览器对所有CSS3选择器的支持情况。启动测试,浏览器会自动测验,并已列表的方式显示当前浏览器对所有css3选择器的支持情况  http://tool......
  • 两个新出的 JavaScript 运算符
    在ECMAScript2021(ES12)中,JavaScript引入了新的逻辑赋值操作符&&=和??=。这些操作符将逻辑运算符与赋值运算符相结合,提供了更加简洁、直观的赋值方式。虽然已经进入标准比较久了,但是我在实际开发中见到的还比较少,今天我们一起来学习下。逻辑与赋值操作符&&=&&=的工作原理......
  • vite3+vue3 实现前端部署加密混淆 javascript-obfuscator
    安装pnpminstalljavascript-obfuscator安装之后在项目根目录新建一个obfuscator.js在obfuscator.js写入以下代码直接复制粘贴`/**@用法vite打包完成后,使用命令行nodejs执行本文件:nodeobfuscator.js它会挨个把里面的js文件做混淆然后替换@说明本质就是依......
  • 24.11.12 JavaScript2
    prompt()confirm()这些函数会阻止js解析器(js解析器执行引擎读取运行js)执行不要使用2history对象历史记录对象对应浏览器前进后退按钮history在历史记录里back前进forward后退go0当前文档负数后......
  • 24.11.13 Javascript3
    Javascript31.dom元素获取查找元素的函数getElementById("id值")查找到唯一一个元素getElementsByClassName("class值")查找指定class的元素数组getElementsByTagName("标签名")查找指定标签名的元素......