首页 > 其他分享 >LeetCode热题100中 35. 46. 70. 73. 118.

LeetCode热题100中 35. 46. 70. 73. 118.

时间:2025-01-12 12:04:04浏览次数:3  
标签:arr matrix 46 35 col let 一阶 118 row

35.搜索插入位置

题目描述:

实现思路:

        这里主要就是二分查找,二分查找要注意对边界值的处理,l 是 数组的第一位,r是数组的最后一位,l <= r 我们就返回 l ,因为我们的判断是nums[mid] < target  取的是mid的左区间已经不包含mid 了,所以是 l = mid + 1 。

代码:

var searchInsert = function(nums, target) {
    let l = 0
    let r = nums.length - 1
    while(l <= r){
        let mid = Math.trunc((l + r) / 2)
        if(nums[mid] < target){
            l = mid + 1
        }else{
            r = mid - 1
        }
    }
    return l
};

46. 全排列

题目描述:

实现思路:

我们通过 user 来存储使用过的值,res 来存储 path 的数组,每次 path.lenght 的值等于nums.length 的时候我们就将 path 的数组加到 res 中去。

代码:

var permute = function(nums) {
    const res = [], path = [];
    backtracking(nums, nums.length, []);
    return res;

    function backtracking(nums,k,used){
        if(path.length === k) {
            res.push(Array.from(path));
            return;
        }
        for (let i = 0; i < k; i++ ) {
            if(used[i] != true){
            path.push(nums[i]);
            used[i] = true; // 同支
            backtracking(nums, k, used);
            path.pop();
            used[i] = false;
            }
        }
    }
};

70. 爬楼梯

题目描述:

实现思路:

规律:
n = 1 ,有1 种方法: 一阶 。
n = 2,有2种方法:一阶+一阶,二阶。
n = 3,有3种方法:一阶+一阶 + 一阶,一阶 +二阶 ,二阶 + 一阶。
n = 4,有5种方法:一阶+一阶 + 一阶+ 一阶,一阶 +二阶 + 一阶,二阶 + 二阶 ,一阶+一阶+二阶, 二阶+一阶 + 一阶 
。。。。
在这里,我们不关心具体用的是什么方法,我们只关心的是方法有几种,这里用的就是动态规划了,dp[ i ] :指的就是达到第 i 阶 有dp[ i ] 种方法,那么dp[ i ] 就是由 dp[ i - 1 ] + dp[ i - 2 ]

代码:

var climbStairs = function(n) {
    const dp = [];
    dp[1] = 1
    dp[2] = 2
    for(let i = 3; i <= n ;i++){
        dp[i] = dp[i-1] + dp[i-2]
    }
    return dp[n]
};

73. 矩阵置零

题目描述:

理解:

        就是在原数组中如果有 0 ,就要将其所在的行和列的元素变为 0。
        原地算法 指的是除了输入数据本身所占用的存储空间之外,不依赖于额外的数据结构或大量辅助数组来存储中间结果。

实现思路:

        通过第一列和第一行来记录哪一列哪一行需要置为 0,第一列和第一行有交叉的元素,也就是 [0][0],所以我们用zerozero 来记录第一列的第一个元素。
        遍历数组时候,如果遇到某一个值为0,将该行第一个元素和该列第一个元素置为 0,因为该行的第一个元素和该列第一个元素都已经遍历过了,所以不会影响到接下来的遍历。
        最后再遍历一次数组,将需要置 0 的行和列置 0 。需要注意的是要先遍历除了第一行和第一列以外的元素,最后遍历第一行和第一列的元素,如果按顺序遍历元素,有可能会改变第一行和第一列存储的 0,从而导致结果错误。

代码:

var setZeroes = function(matrix) {
    const rows = matrix.length
    const cols = matrix[0].length
    let zerozero = 1
    for(let row = 0;row < rows; row++){
        for(let col = 0;col < cols; col++){
            if(matrix[row][col] == 0){
                matrix[0][col] = 0
                if(row > 0){
                    matrix[row][0] = 0
                }else{
                    zerozero = 0
                }
            }
        }
    }

    for(let row = 1;row < rows;row++){
        for(let col = 1;col < cols; col++){
            if(matrix[0][col] == 0 || matrix[row][0] == 0){
                matrix[row][col] = 0
            }
        }
    }

    for(let row = 0;row < rows;row++){
        if(matrix[0][0] == 0){
            matrix[row][0] = 0
        }
    }

    for(let col = 0;col < cols;col++){
        if(zerozero == 0){
            matrix[0][col] = 0
        }
    }

    return matrix;
};

118. 杨辉三角

题目描述:

实现思路:

        我们观察可以发现杨辉三角的第一位,也就是最上面的数一直等于 1 ,并且每行的第一位和最后一位都等于 1 ,除了上面所说的剩下的数,举个例子,第四行的第二位数 = 第三行的第一位 + 第三行的第二位,第四行的第三位数 = 第三行的第二位 + 第三行的第一位。我们设除上述的特殊位以外的数 arr[ i ][ j ],那么由此规律可以推出它的每一位就等于:                                                arr[ i ][ j ] = arr[ i - 1 ][ j - 1] + arr[ i - 1 ][ j ]  。

代码:

var generate = function(numRows) {
   if(numRows === 0) return [];
   //  numRows 不是 0 ,第一位必为 1
   let arr = [[1]];
   for(let i = 1;i < numRows;i++) {
    //每行第一位
    arr[i] = [1]
    for(let j = 1;j < i;j++){
        arr[i][j] = arr[i-1][j-1] + arr[i-1][j]
    }
    arr[i][i] = 1
   }
   return arr
};

标签:arr,matrix,46,35,col,let,一阶,118,row
From: https://blog.csdn.net/m0_74350369/article/details/144616519

相关文章

  • Rockchip RK3588 - 板级支持包之RKNPU
    ----------------------------------------------------------------------------------------------------------------------------开发板:ArmSoM-Sige7开发板eMMC:64GBLPDDR4:8GB显示屏:15.6英寸HDMI接口显示屏u-boot:2017.09linux:5.10-------------------------------......
  • 关于此题[ABC350E] Toward 0和[ABC188F] +1-1x2记忆化搜索的一些总结
    传送门1传送门2这两道题都有个特性,那就是数据范围到了\(10^{18}\),这会让我们想用记忆化搜索或者期望DP的想法望而却退但是实际上我们可以用map。有人会说,用map那时间上貌似也过不去啊!但是我们发现这两道题当中,我们可以进行的操作都有除法操作,这就有点像势能线段树,时间复杂度实......
  • springboot食物营养分析平台-计算机毕业设计源码75335
    基于SpringBoot的食物营养分析平台-可点击查看演示录像https://www.bilibili.com/video/BV1LuCtYXE6i/?vd_source=72970c26ba7734ebd1a34aa537ef5301摘要随着我国经济的发展,人民生活水平的提高,人们的饮食己由温饱型转向营养型。因此,营养问题日益受到重视。食物营养分析平台......
  • 46. bootstrap
    1.bootstrap介绍 中文网:https://bootcss.com/bootstrap需要导入两个文件:上方文件夹里的css文件和JavaScript文件由于bootstrapv3依赖jQuery,因此还要导入jQuery文件bootstrap的核心是通过class直接使用类2.全局css样式Bootstrap将设置全局的CSS样式。HTML的基本......
  • 3. ur3+robotiq ft sensor+robotiq 2f 140+realsense d435i配置rviz,gazebo仿真环境
    原文地址:ur3+robotiqftsensor+robotiq2f140+realsensed435i配置rviz,gazebo仿真环境ur3+robotiqftsensor+robotiq2f140+realsensed435i配置rviz,gazebo仿真环境搭建环境:ubuntu:20.04ros:Noneticsensor:robotiq_ft300gripper:robotiq_2f_140_gripperUR:UR3reasens......
  • SSM线上拍卖系统-计算机毕业设计源码28846
    摘要随着互联网的快速发展和普及,线上拍卖作为一种新兴的商业模式,正逐渐改变着人们的购物和消费习惯。线上拍卖系统不仅为消费者提供了一个便捷、透明的购物平台,也为商家提供了一个更加广阔的市场和更多的销售机会。因此,设计和实现一个高效、稳定、安全的线上拍卖系统具有重......
  • 35岁重学网络安全——SQL注入篇(三)
    浪子回头金不换,35岁重学网络安全——SQL注入篇。本篇内容简介:MYSQL中的查询相关操作以及一些常用函数。实验环境在security库中做下列测试:usesecurity;PS:如果已经成功安装了sqli-labs的靶场,在Mysql中已经存在security库。基本查询#select+列名(*代表所有)from表......
  • 35岁重学网络安全——SQL注入篇(二)
    浪子回头金不换,35岁重学网络安全——SQL注入篇。本篇内容简介:MYSQL中库、表、行和列的基本概念与相关操作基本概念库(Database):库是数据存储的最高级别,可以看作是一个容器,用于存储相关的表集合。一个MySQL服务器可以有多个数据库,每个数据库可以独立管理,互不干扰。例如,一个......
  • JSP开放实验室预约管理系统2118f--(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、研究背景与意义随着教育和科研的不断发展,实验室资源的有效管理和开放共享成为重要议题。传统的人工管理方式存在效率低、资源浪费等问题,无法满......
  • 【开源】基于SpringBoot框架企业OA管理系统(计算机毕业设计)+万字毕业论文 T135
    系统合集跳转源码获取链接一、系统环境运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。IDE环境:Eclipse,Myeclipse,IDEA或者SpringToolSuite都可以tomcat环境:Tomcat7.x,8.x,9.x版本均可操作系统环境:WindowsXP/7/8//8.1/10/11或者L......