算法
LeetCode
题目
- 接雨水: 字节面试必备,双指针法
排列组合
- 全排列: 回溯法
- 实现
[['a', 'b'], ['n', 'm'], ['0', '1']]
(长度不固定) 的全排列为['an0', 'an1', 'am0', 'am1', 'bn0', 'bn1', 'bm0', 'bm1']
ts
function combineList(list: string[][]) {
const result: string[] = []
function dfs(index: number, current: string) {
if (index === list.length) {
result.push(current)
return
}
for (const char of list[index])
dfs(index + 1, current + char)
}
dfs(0, '')
return result
}
console.log(
combineList([['a', 'b'], ['n', 'm'], ['0', '1']]),
)
function combineList(list: string[][]) {
const result: string[] = []
function dfs(index: number, current: string) {
if (index === list.length) {
result.push(current)
return
}
for (const char of list[index])
dfs(index + 1, current + char)
}
dfs(0, '')
return result
}
console.log(
combineList([['a', 'b'], ['n', 'm'], ['0', '1']]),
)
ts
function combineList2(list: string[][]) {
if (list.length === 0)
return []
let result: string[] = []
for (const sublist of list) {
const newResult: string[] = []
for (const char of sublist) {
if (result.length === 0) {
newResult.push(char)
}
else {
for (const item of result)
newResult.push(item + char)
}
}
result = newResult
}
return result
}
console.log(
combineList2([['a', 'b'], ['n', 'm'], ['0', '1']]),
)
function combineList2(list: string[][]) {
if (list.length === 0)
return []
let result: string[] = []
for (const sublist of list) {
const newResult: string[] = []
for (const char of sublist) {
if (result.length === 0) {
newResult.push(char)
}
else {
for (const item of result)
newResult.push(item + char)
}
}
result = newResult
}
return result
}
console.log(
combineList2([['a', 'b'], ['n', 'm'], ['0', '1']]),
)
快速排序
红黑树的特性
腾讯前端实习一面问了我 红黑树……? 面微信的时候又被问了