每日两题 T20
时间:2022-07-22
本文章向大家介绍每日两题 T20,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
算法
LeetCode T22. 括号生成[1]
描述
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例
输入:n = 3
输出:[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
分析
看到这种符合某种规律,但又有区别的算法问题,自然想到递归的解法。当然我们也知道递归解法是可以转化为栈+循环的解法的。
观察可得:
1.某一次递归终止时需要将当前字符存入数组2.字符任取一个位置左侧必为左括号 >= 右括号3.每次递归除了需要传当前字符还需要记清当前左右括号数
代码
var generateParenthesis = function (n) {
let res = [];
// cur :当前字符 left:当前字符左括号 right:当前字符右括号
const help = (cur, left, right) => {
if (cur.length === 2 * n) {
res.push(cur);
return;
}
if (left < n) {
help(cur + "(", left + 1, right)
}
if (right < left) {
help(cur + ")", left, right + 1);
}
};
help("", 0, 0);
return res;
};
前端
改造下面的代码,使之输出0 - 9
for (var i = 0; i< 10; i++){
setTimeout((i) => {
console.log(i);
}, 1000,i)
}
分析
主要考察对于变量作用域的理解,解决变量作用域即可。
方法一
•利用 setTimeout
函数的第三个参数,会作为回调函数的第一个参数传入•利用 bind
函数部分执行的特性
for (var i = 0; i < 10; i++) {
setTimeout(i => {
console.log(i);
}, 1000, i)
}
或者
for (var i = 0; i < 10; i++) {
setTimeout(console.log, 1000, i)
}
或者
for (var i = 0; i < 10; i++) {
setTimeout(console.log.bind(null, i), 1000)
}
方法二
利用 let
变量的特性 — 在每一次 for
循环的过程中,let
声明的变量会在当前的块级作用域里面(for
循环的 body 体,也即两个花括号之间的内容区域)创建一个文法环境(Lexical Environment),该环境里面包括了当前 for
循环过程中的 i
,
for (let i = 0; i < 10; i++) {
setTimeout(() => {
console.log(i);
}, 1000)
}
方法三
利用函数自执行的方式,把当前 for 循环过程中的 i 传递进去,构建出块级作用域。
for (var i = 0; i < 10; i++) {
(i => {
setTimeout(() => {
console.log(i);
}, 1000)
})(i)
}
方法四
纯属娱乐,利用 new Function
或者 eval
for (var i = 0; i < 10; i++) {
setTimeout(new Function('console.log(i)')(), 1000)
}
References
[1]
22. 括号生成: https://leetcode-cn.com/problems/generate-parentheses/
- 数据层扩展包EFCachingProvider 总结
- Mac配置Maven
- FileSystemWatcher 导致Mono ASP.NET应用程序CPU使用率比较高
- 网卡收包流程
- Android 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅
- Terminal &zsh &oh-my-zsh配置
- 【Python量化投资】基于网格优化、遗传算法对CTA策略进行参数优化
- 将我的 Windows Phone 应用程序更新到 Windows Phone 8
- 绑定子类的泛型基类,反模式?
- 给创业码农的话--如何提升开发效率
- 基于OEA框架的客户化设计(二) 元数据设计
- 自定义actionbar
- (转)JS算法系列-数组去重
- 基于OEA框架的客户化设计(三) “插件式”DLL
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Django+Vue开发生鲜电商平台之5.使用DRF实现商品列表页和过滤
- Spring 注入集合的成员变量属性
- 深入理解JVM(③)Java的锁优化
- 解Bug之路-Nginx 502 Bad Gateway
- bootstrap v4 toast轻提示正确用法
- 精华 | SQL注入万能Bypass技巧
- 【STM32F429开发板用户手册】第31章 STM32F429的SPI总线基础知识和HAL库API
- Linux 查找当前目录下所有包含指定内容的文件
- 父子管道更有效地扩展应用及其存储库结构
- Go语言 | 你还在这样获取文件的大小吗?
- 如何在Gitlab流水线中对部署进行控制?
- 工具的使用 | Hydra暴力破解工具的用法
- “灯下黑”应用在windows隐身后门中的实践
- 渗透测试-信息收集命令总结
- 什么?一个核同时执行两个线程?