【JavaScript】LeetCode:66-70

news2025/1/15 8:31:15

文章目录

  • 66 组合总和
  • 67 括号生成
  • 68 单词搜索
  • 69 分割回文串
  • 70 N皇后

66 组合总和

在这里插入图片描述

  • 回溯
  • sum:当前组合的数字和。
  • 递归终止条件:sum > target。
  • 收集结果条件:sum = target,找到了满足条件的组合。
  • 注意:因为可以重复取数,所以下一次遍历的开始索引startIndex为当前遍历的节点索引i。
/**
 * @param {number[]} candidates
 * @param {number} target
 * @return {number[][]}
 */
var combinationSum = function(candidates, target) {
    var traversal = function(candidates, target, sum, startIndex){
        if(sum > target){
            return;
        }
        if(sum == target){
            res.push(path.slice());
            return;
        }
        for(let i = startIndex; i < candidates.length; i++){
            sum += candidates[i];
            path.push(candidates[i]);
            traversal(candidates, target, sum, i);
            sum -= candidates[i];
            path.pop();
        }
    };
    let res = [];
    let path = [];
    traversal(candidates, target, 0, 0);
    return res;
};

67 括号生成

在这里插入图片描述

  • 回溯
  • left:左括号的数量,right:右括号的数量。
  • left < right:无效。
  • 收集结果条件:left = right = n,括号都用完了。
  • 当left < n时,添加左括号,进入下一层递归。
  • 当left >= n且left > right时,添加右括号,进入下一层递归。
/**
 * @param {number} n
 * @return {string[]}
 */
var generateParenthesis = function(n) {
    var traversal = function(n, str, left, right){
        if(left == n && right == n){
            res.push(str);
            return;
        }
        if(left < n){
            traversal(n, str + "(", left + 1, right);
        }
        if(left > right){
            traversal(n, str + ")", left, right + 1);
        }
    };
    let res = [];
    traversal(n, "", 0, 0);
    return res;
};

68 单词搜索

在这里插入图片描述

  • 回溯、DFS
  • 遍历board中每一个格子,若该格子的字母为word的首字母,则开始进入dfs遍历。
  • 进入dfs后,按照上、右、下、左四个方向遍历。
  • 递归终止条件:找到了word的最后一个字母。
  • 继续递归的条件:横纵坐标不越界、该坐标所在位置之前没有被访问过、该坐标对应的字母 = word中当前index对应的字母。
/**
 * @param {character[][]} board
 * @param {string} word
 * @return {boolean}
 */
var exist = function(board, word) {
    var dfs = function(board, word, vis, x, y, index){
        if(index == word.length){
            return true;
        }
        for(let d = 0; d < 4; d++){
            let x_ = x + dirt[d][0];
            let y_ = y + dirt[d][1];
            if(x_ >= 0 && x_ < m && y_ >= 0 && y_ < n && vis[x_][y_] == 0 && word[index] == board[x_][y_]){
                vis[x_][y_] = 1;
                if(dfs(board, word, vis, x_, y_, index + 1)){
                    return true;
                }
                vis[x_][y_] = 0;
            }
        }
        return false;
    };
    let m = board.length;
    let n = board[0].length;
    let vis = Array(m).fill(null).map(() => Array(n).fill(0));
    let dirt = [[1, 0], [0, 1], [-1, 0], [0, -1]];
    for(let i = 0; i < m; i++){
        for(let j = 0; j < n; j++){
            if(word[0] == board[i][j]){
                vis[i][j] = 1;
                if(dfs(board, word, vis, i, j, 1)){
                    return true;
                }
                vis[i][j] = 0;
            } 
        }
    }
    return false;
};

69 分割回文串

在这里插入图片描述

  • 回溯
  • startIndex:从0开始,表示切割线。
  • 判断当前切割的子串( [ startIndex, i ] )是否是回文字符串:双指针法,一前一后两个指针向中间移动。
  • 递归终止条件:切割线到str最后了。
  • 下一次递归的切割点:当前遍历字母的索引i + 1。
var isValid = function(str){
    let start = 0;
    let end = str.length - 1;
    while(start < end){
        if(str.charAt(start) != str.charAt(end)){
            return false;
        }
        start++;
        end--;
    }
    return true;
};

/**
 * @param {string} s
 * @return {string[][]}
 */
var partition = function(s) {
    var traversal = function(s, startIndex){
        if(startIndex == s.length){
            res.push(path.slice());
            return;
        }
        for(let i = startIndex; i < s.length; i++){
            let tmp = s.slice(startIndex, i + 1);
            if(isValid(tmp)){
                path.push(tmp);
                traversal(s, i + 1);
                path.pop();
            }
        }
    }
    let res = [];
    let path = [];
    traversal(s, 0);
    return res;
};

70 N皇后

在这里插入图片描述

  • 回溯
  • row:遍历的行数,i:遍历的列数。
  • 递归结束条件:最后一行放置完Q了,注意收集数组时应该转为字符串形式。
var isValid = function(chessboard, row, col, n){
    for (let i = 0; i < row; i++) {
      for (let j = 0; j < n; j++) {
        if (chessboard[i][j] == 'Q' && (j == col || Math.abs(i - row) == Math.abs(j - col))) {
          return false;
        }
      }
    }
    return true;
}

/**
 * @param {number} n
 * @return {string[][]}
 */
var solveNQueens = function(n) {
    var traversal = function(chessboard, row, n){
        if(row == n){
            let tmp = chessboard.slice()
            for (let i = 0; i < n; i++) {
                tmp[i] = tmp[i].join(''); 
            }
            res.push(tmp);
            return;
        }
        for(let i = 0; i < n; i++){
            if(isValid(chessboard, row, i, n)){
                chessboard[row][i] = 'Q';
                traversal(chessboard, row + 1, n);
                chessboard[row][i] = '.';
            }
        }
    };
    let res = [];
    let chessboard = Array(n).fill(null).map(() => Array(n).fill('.'));
    traversal(chessboard, 0, n);
    return res;
};

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

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

相关文章

亚洲最具影响力人物颜廷利:心理健康对身体健康的重要影响

在当代社会&#xff0c;面对疾病与痛苦&#xff0c;人们往往在西医与中医之间做出选择。21世纪世界上知名度最高的人物颜廷利教授的精辟见解指出了这两种医学体系的根本差异&#xff1a;西医以其高昂的费用&#xff0c;针对生理上的疾苦提供快速而直接的解决之道&#xff1b;相…

Python应用指南:利用高德地图API获取公交可达圈

参考文章&#xff1a;城市公交可达圈绘制方法&#xff08;一&#xff09; - 知乎 (zhihu.com) 本篇文章我们聚焦于通过公共交通出行方式&#xff08;包括公交、地铁、公交地铁的组合&#xff09;来获取一定时间内可以到达的范围。为了实现这一目标&#xff0c;我们将使用高德地…

在 Android 应用程序中实现与WebSocket 服务器的实时通信

&#x1f604;作者简介&#xff1a; 小曾同学.com,一个致力于测试开发的博主⛽️&#xff0c;主要职责&#xff1a;测试开发、CI/CD 如果文章知识点有错误的地方&#xff0c;还请大家指正&#xff0c;让我们一起学习&#xff0c;一起进步。 &#x1f60a; 座右铭&#xff1a;不…

spring-boot学习(2)

上次学习截止到拦截器 1.构建RESfun服务 PathVariable通过url路径获取url传递过来的信息 2.MyBatisPlus 第三行的mydb要改为自己的数据库名 第四&#xff0c;五行的账号密码改成自己的 MaooerScan告诉项目自己的这个MyBatisPlus是使用在哪里的&#xff0c;包名 实体类的定义…

PL/SQL Developer15和Oracle Instant Client安装配置详细图文教程

一、下载介质 1、Oracle Instant Client Oracle Instant Client Downloads | Oracle 中国 2、PL/SQL DEVELOPER PL/SQL Developer - Allround Automations Free trial - Allround Automations 二、安装介质。 1、安装plsqldev1504x64.msi。 一路默认下一步。 选择输入许可信…

实跑 YOLO V11在 OAK内部运行的效果

哈喽&#xff0c;各位OAK中国的朋友们! 大家好我是张伯生 今天&#xff0c;我想给大家演示一下最新发布的Yolo V11神经网络 下面我将演示的一个程序是&#xff1a;同时在我们的OAK相机上跑Yolo V11和RGB-D&#xff0c;也就是彩色相机和深度图的一个叠加的一个效果 RGB-D和Yo…

java_for循环

基本语法 for 关键字&#xff0c;表示循环控制for 有四要素: (1)循环变量初始化(2)循环条件(3)循环操作(4)循环变量迭代循环操作 , 这里可以有多条语句&#xff0c;也就是我们要循环执行的代码如果 循环操作(语句) 只有一条语句&#xff0c;可以省略 {}, 建议不要省略 流程图 …

电气学习知识点

文章目录 NPN和PNP输出 NPN和PNP输出 NPN和PNP&#xff08;两种不同类型的三极管&#xff09;都是集电极输出。&#xff08;集电极开路输出&#xff09; 下图b:基极、c集电极、e发射极 NPN示意图&#xff08;集电极连接负载 — 正方形&#xff09; NPN的电流流向是从集电极…

Elasticsearch设置 X-Pack认证,设置账号和密码

前言 以下Elasticsearch版本&#xff1a;7.9.3 ES自带的X-Pack密码验证&#xff1a; X-Pack是elasticsearch的一个扩展包&#xff0c;将安全&#xff0c;警告&#xff0c;监视&#xff0c;图形和报告功能捆绑在一个易于安装的软件包中&#xff0c;所以我们想要开启账号密码验证…

Scala入门基础(10.1)高阶函数2

一.reduce 二.reduceLeft-reduceRight 三.flod 四.sorter函数 五.sortWith 一.reduce 作用&#xff1a;reduce是一种集合操作&#xff0c;用于对集合中的元素进行聚合操作&#xff0c;返回一个单一的结果。它通过指定的二元操作(即取两个元素进行操作)对集合中的所有元素进…

力扣刷题-算法基础

hello各位小伙伴们,为了进行算法的学习,小编特意新开一个专题来讲解一些算法题 1.移除元素. - 力扣(LeetCode) 本题大概意思是给定一个数组和一个数val删除与val相同的元素,不要改变剩余元素的顺序,最后返回剩余元素的个数。 我们在这里使用双指针,这里的双指针并不是…

npm 加速,命令行修改国内镜像源【附带国内最新几个镜像】超简约版~

为什么要配置国内镜像源&#xff1f; npm 的官方源服务器在国外&#xff0c;对于国内开发者来说&#xff0c;下载速度可能会比较慢&#xff0c;甚至可能会出现下载失败的情况。而国内的镜像源服务器通常会对官方源的包进行同步&#xff0c;并且在国内部署&#xff0c;这样可以…

使用OneAPI+Ollama+Dify搭建一个兼容OpenAI的API发布及AI应用开发系统(三)Dify的安装及配置

在GitHub中的AI工作流短代码平台中&#xff0c;Dify获星一直名列前茅&#xff0c;目前已达48K星&#xff0c;其工作稳定性也是非常的高&#xff0c;在这里我们介绍一下Dify的安装。 由于Dify的结构非常的复杂&#xff0c;我们这里介绍Docker的方式进行安装&#xff0c;硬件的最…

Oracle+11g+笔记(7)-数据库空间管理

Oracle11g笔记(7)-数据库空间管理 7、数据库空间管理 存储空间是数据库系统中非常重要的资源&#xff0c;无论是数据库中的对象还是数据库中的数据都需要空间进行存储&#xff0c;一旦 数据库空间被全部占用&#xff0c;那么该数据库系统就不能再接受任何对象和数据&#xf…

浙大数据结构:09-排序2 Insert or Merge

这道题我们采用先判断是不是insert如果不是再用merge算一下 机翻 1、条件准备 首先存元素个数n&#xff0c;然后oldnum存原始数组&#xff0c;newnum存新数组 #include <iostream> #include<vector> #include<algorithm> using namespace std; #define e…

SSD | (三)NAND闪存(上)

文章目录 &#x1f4da;闪存基本原理&#x1f407;存储单元及相关操作&#x1f407;闪存类型&#x1f407;闪存组织结构&#x1f407;擦、写、读操作&#x1f407;阈值电压分布图 &#x1f4da;闪存基本原理 &#x1f407;存储单元及相关操作 闪存是一种非易失性存储器&#x…

ArkTS中的几个易错问题

问题1&#xff1a;copyWithin的乱用问题 由于鸿蒙开发者很多可能是安卓转的&#xff0c;在安卓侧尤其是kotlin写手觉得copyOfRange很好用&#xff0c;复制数组的某一段数据就用copyOfRange&#xff0c;而copyWithin其实不是同等作用。 下面是AI对copyWithin的解释&#xff1a…

SpringBoot教程(三十二) | SpringBoot集成Skywalking链路跟踪

SpringBoot教程&#xff08;三十二&#xff09; | SpringBoot集成Skywalking链路跟踪 Skywalking是什么&#xff1f;Skywalking与JDK版本的对应关系Skywalking下载Skywalking 数据存储Skywalking 的启动部署探针方式一&#xff1a;IDEA 部署探针方式二&#xff1a;Java 命令行启…

101 - Lecture 7

回顾冯诺依曼模型&#xff08;von Neumann Model&#xff09;&#xff0c;这是现代计算机体系结构的基础。以下是该模型的关键概念&#xff1a; 1.通用计算机&#xff1a; • 冯诺依曼提出的计算机是通用机器&#xff08;general- purpose&#xff09;&#xff0c;可以通过可…

如何防止架构师PM化?

目录标题 导读引言&#xff1a;什么是架构师PM化架构师PM化的特点亲力操刀的实质性工作越来越少更喜欢拉会催进度越来越难直接回答问题喜欢流程 架构师PM化的危害对项目的危害对组织的危害对架构师个人的危害对研发同学的危害 如何防止架构师PM化组织上要提倡做实事个人上要做点…