生成括号 n = 1 ()
思路:f(n) 的值永远都是 f(n-1) 的结果 里面每一项push ()
export function generateParenthesis(initn: number): string[] {
const func = (n: number): string[] => {
if (n == 1) {
return ['()']
}
let res = func(n - 1)
let pjRes = []
for (let i = 0; i < res.length; i++) {
let str = res[i]
let sL = str.length
for (let j = 0; j < sL; j++) {
pjRes.push(`${
str.slice(0, j)}()${
str.slice(j, sL)}`)
}
}
return pjRes
}
return Array.from(new Set(func(initn)))
}
console.log(generateParenthesis(3), 'na');
实现深拷贝包括 map set 类型
- map
- set
- 函数
- 循环引用
- 深层数据拷贝
export function cloneDeep(obj: any, map = new WeakMap()): any {
if (typeof obj !== 'object' || obj == null) return obj
// 避免循环引用
const objFromMap = map.get(obj)
if (objFromMap) return objFromMap
let target: any = {
}
map.set(obj, target)
// Map
if (obj instanceof Map) {
target = new Map()
obj.forEach((v, k) => {
const v1 = cloneDeep(v, map)
const k1 = cloneDeep(k, map)
target.set(k1, v1)
})
}
// Set
if (obj instanceof Set) {
target = new Set()
obj.forEach(v => {
const v1 = cloneDeep(v, map)
target.add(v1)
})
}
// Array
if (obj instanceof Array) {
target = obj.map(item => cloneDeep(item, map))
}
// Object
for (const key in obj) {
const val = obj[key]
const val1 = cloneDeep(val, map)
target[key] = val1
}
return target
}
const a