【JavaScript】LeetCode:66-70

embedded/2024/10/17 22:54:07/

文章目录

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

66 组合总和

在这里插入图片描述

  • 回溯
  • sum:当前组合的数字和。
  • 递归终止条件:sum > target。
  • 收集结果条件:sum = target,找到了满足条件的组合。
  • 注意:因为可以重复取数,所以下一次遍历的开始索引startIndex为当前遍历的节点索引i。
javascript">/*** @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时,添加右括号,进入下一层递归。
javascript">/*** @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对应的字母。
javascript">/*** @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。
javascript">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了,注意收集数组时应该转为字符串形式。
javascript">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.ppmy.cn/embedded/128288.html

相关文章

WordPress添加meta标签做seo优化

一、使用function.php文件添加钩子函数添加 方法1、使用is_page()判断不同页面的page_id进行辨别添加不同页面keyword和description &#xff08;1&#xff09;通过页面前台源码查看对应页面的id &#xff08;2&#xff09;或者通过wordpress后台&#xff0c;点击页面列表&…

SpringBoot定时任务@Scheduled完整功能详解(提供Gitee源码)

目录 一、实现定时任务 1.1、fixedRate 1.2、fixedDelay 1.3、initialDelay 1.4、cron 二、cron表达式 三、读取配置文件 四、实现并行执行定时任务 五、Gitee源码 一、实现定时任务 首先在主应用类或者任何配置类上添加@EnableScheduling注解,以启用定时任务功能。…

使用Python爬虫API,轻松获取电商商品SKU信息

在电子商务的复杂世界中&#xff0c;SKU&#xff08;Stock Keeping Unit&#xff0c;库存单位&#xff09;信息是连接供应商、库存、销售和客户服务的桥梁。它不仅包含了商品的规格、价格、库存等关键数据&#xff0c;还直接影响到库存管理、价格策略和市场分析等多个方面。在这…

Linux shellcheck工具

安装工具 通过linux yum源下载&#xff0c;可能因为yum源的问题找不到软件包&#xff0c;或者下载的软件包版本太旧。 ShellCheck的源代码托管在GitHub上(推荐下载方式)&#xff1a; GitHub - koalaman/shellcheck: ShellCheck, a static analysis tool for shell scripts 对下…

[网鼎杯 2018]Fakebook

点击进入页面&#xff0c;发现有login和join两个页面&#xff0c;我们尝试登录login未果&#xff0c;于是转去join页面&#xff0c;随便填写一些信息 点击jion&#xff0c;发现注册成功&#xff0c;随后便出现了所有我们注册了的页面&#xff1a; 随便点击一个&#xff0c;比如…

【鸟类识别系统】Python+卷积神经网络算法+人工智能+深度学习+ResNet50算法+计算机课设项目

一、介绍 鸟类识别系统。本系统采用Python作为主要开发语言&#xff0c;通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型&#xff0c;然后进行模型的迭代训练&#xff0c;得到一个识别精度较高的模型&#xff0c;然后在…

log file sync 内部执行过程

通常oracle的log file sync执行大致印象是等待cpu、log file parallel write、等待cpu&#xff0c;遇到问题主要考虑lgwr自适应模式参数要关闭、io性能、cpu瓶颈、归档数量和大小等&#xff0c;但是内部执行内容其实很多&#xff0c;尤其是有ADG了以后。 log file sync主要执行…

利用Spring Boot构建高效B2B医疗病历平台

第1章绪论 计算机已经从科研院所&#xff0c;大中型企业&#xff0c;走进了平常百姓家&#xff0c;Internet遍及世界各地&#xff0c;在网上能够用计算机进行文字草拟、修改、打印清样、文件登陆、检索、综合统计、分类、数据库管理等&#xff0c;用科学的方法将无序的信息进行…