Skip to main content

weekly247

处理特殊字符#

空格
\t 水平制表符
\v 垂直制表符
\f 换页符
\n 换行
\s 一个空白字符,包括空格、制表符、换页符和换行符

String.trim()#

场景: 多行文本尾部限制空格和换行符, 提交表单前, 处理数据

扩展: String.trimEnd()、 String.trimStart()

v-model.trim=""#

从操作上限制 场景:仅一行输入, 且限制无法输入空格、换行

CSS: 不允许换行white-space: nowrap;#

场景: 行内容器不希望换行

CSS:允许词内换行word-break: break-all;#

场景:较小的文本框, 遇到较长单词, 被撑开, 破坏正常布局。 决绝方案: 允许词内换行

DFS-FloodFill#

机器人的运动范围](https://leetcode-cn.com/problems/ji-qi-ren-de-yun-dong-fan-wei-lcof/) 以 [0, 0] 为起点, 寻找可行路线 ⚠️ 仅需向右、向左即可 dfs

function movingCount(m: number, n: number, k: number): number {
let visited = Array.from({ length: m }, v => new Array(n).fill(false));
return dfs(m, n, k, 0, 0, visited);
};
function dfs(m: number, n: number, k: number, i: number, j: number, visited: boolean[][]): number {
if (i > m - 1 || j > n - 1 || visited[i][j] || getSum(i) + getSum(j) > k) {
return 0;
}
visited[i][j] = true;
let ans = 1;
for (let [dx, dy] of [[0, 1], [1, 0]]) {
let x = i + dx, y = j + dy;
ans += dfs(m, n, k, x, y, visited);
}
return ans;
}
function getSum(num: number): number {
let ans = 0;
while (num > 0) {
ans += (num % 10);
num = Math.floor(num / 10);
}
return ans;
}

bfs

function movingCount(m: number, n: number, k: number): number {
let visited = Array.from({ length: m }, v => new Array(n).fill(false));
let queue = [[0, 0]];
let ans = 1;
while (queue.length > 0) {
let [i, j] = queue.shift();
for (let [dx, dy] of [[0, 1], [1, 0]]) {
let x = i + dx, y = j + dy;
if (x > m - 1 || y > n - 1 || visited[x][y] || getSum(x) + getSum(y) > k) {
continue;
}
++ans;
visited[x][y] = true;
queue.push([x, y]);
}
}
return ans;
};
function getSum(num: number): number {
let ans = 0;
while (num > 0) {
ans += (num % 10);
num = Math.floor(num / 10);
}
return ans;
}

200. 岛屿数量#

由于只有0、1两种状态,直接修改代替visited标记访问状态 dfs 遍历每个点,搜索整个小岛后并标记为访问, 计数

function numIslands(grid: string[][]): number {
let m = grid.length, n = grid[0].length;
let ans = 0;
for (let i = 0; i < m; ++i) {
for (let j = 0; j < n; ++j) {
if (grid[i][j] == '1') {
dfs(grid, i, j);
++ans;
}
}
}
return ans;
};
function dfs(grid: string[][], i: number, j: number) {
let m = grid.length, n = grid[0].length;
if (i < 0 || i > m - 1 || j < 0 || j > n - 1 || grid[i][j] == '0') {
return;
}
grid[i][j] = '0';
for (let [dx, dy] of [[0, 1], [0, -1], [1, 0], [-1, 0]]) {
let x = i + dx, y = j + dy;
dfs(grid, x, y);
}
}

bfs 遍历每个点,(宽度)搜索小岛全部并标记为已访问, 计数

function numIslands(grid: string[][]): number {
let m = grid.length, n = grid[0].length;
let ans = 0;
for (let i = 0; i < m; ++i) {
for (let j = 0; j < n; ++j) {
if (grid[i][j] == '1') {
bfs(grid, i, j)
++ans;
}
}
}
return ans;
};
function bfs(grid: string[][], r: number, c: number): void {
let m = grid.length, n = grid[0].length;
let queue = new Array();
queue.push([r, c]);
while (queue.length > 0) {
let [i, j] = queue.shift();
for (let [dx, dy] of [[0, 1], [0, -1], [1, 0], [-1, 0]]) {
let x = i + dx, y = j + dy;
if (x >= 0 && x < m && y >= 0 && y < n && grid[x][y] == '1') {
grid[x][y] = '0';
queue.push([x, y]);
}
}
}
}

695. 岛屿的最大面积#

由于只有0、1两种状态,直接修改代替visited标记访问状态 dfs

function maxAreaOfIsland(grid: number[][]): number {
let m = grid.length, n = grid[0].length;
let res = 0;
for (let i = 0; i < m; ++i) {
for (let j = 0; j < n; ++j) {
if (grid[i][j] == 1) {
res = Math.max(dfs(grid, i, j), res);
}
}
}
return res;
};
function dfs(grid: number[][], i: number, j: number): number {
let m = grid.length, n = grid[0].length;
if (i < 0 || i > m - 1 || j < 0 || j > n - 1 || grid[i][j] == 0) {
return 0;
}
grid[i][j] = 0;
let res = 1;
for (let [dx, dy] of [[0, 1], [0, -1], [1, 0], [-1, 0]]) {
res += dfs(grid, i + dx, j + dy);
}
return res;
}

130. 被围绕的区域#

[["X","X","X"],["X","O","X"],["X","X","X"]] [["X","X","X","X"],["X","O","O","X"],["X","X","O","X"],["X","O","X","X"]]

/**
Do not return anything, modify board in-place instead.
*/
function solve(board: string[][]): void {
let m = board.length, n = board[0].length;
if (m < 3 || n < 3) return;
let visited = Array.from({ length: m }, v => new Array(n).fill(false));
// 第一行,最后一行, 第一列, 最后一列
for (let i of [0, m-1]) {
for (let j = 0; j < n; ++j) {
if (board[i][j] == 'X') {
visited[i][j] = true;
} else {
dfs(board, i, j, visited, true);
}
}
}
for (let i = 0; i < m; ++i) {
for (let j of [0, n - 1]) {
if (board[i][j] == 'X') {
visited[i][j] = true;
} else {
dfs(board, i, j, visited, true);
}
}
}
for (let i = 1; i < m - 1; ++i) {
for (let j = 1; j < n - 1; ++j) {
!visited[i][j] && dfs(board, i, j, visited);
}
}
};
function dfs(board: string[][], i: number, j: number, visited: boolean[][], edge = false): void {
let m = board.length, n = board[0].length;
if (i < 0 || i > m - 1 || j < 0 || j > n - 1 || visited[i][j]) {
return;
}
visited[i][j] = true;
if (board[i][j] == 'X') {
return;
}
if (!edge) {
board[i][j] = 'X';
}
for (let [dx, dy] of [[0, 1], [0, -1], [1, 0], [-1, 0]]) {
let x = i + dx, y = j + dy;
dfs(board, x, y, visited, edge);
}
}

关于前端职业规划的一点思考#