From b9226e3181decd077f1c55d11d86c9e801553367 Mon Sep 17 00:00:00 2001 From: rain84 Date: Sun, 11 Aug 2024 21:53:28 +0300 Subject: [PATCH 1/2] feat: add ts solution to lc problem: No.1568 --- .../README.md | 58 +++++++++++++++++++ .../README_EN.md | 58 +++++++++++++++++++ .../Solution.ts | 53 +++++++++++++++++ 3 files changed, 169 insertions(+) create mode 100644 solution/1500-1599/1568.Minimum Number of Days to Disconnect Island/Solution.ts diff --git a/solution/1500-1599/1568.Minimum Number of Days to Disconnect Island/README.md b/solution/1500-1599/1568.Minimum Number of Days to Disconnect Island/README.md index 4d250f926d168..e432fb37b1ebd 100644 --- a/solution/1500-1599/1568.Minimum Number of Days to Disconnect Island/README.md +++ b/solution/1500-1599/1568.Minimum Number of Days to Disconnect Island/README.md @@ -295,6 +295,64 @@ func minDays(grid [][]int) int { } ``` +#### TypeScript + +```ts +function minDays(grid: number[][]): number { + const [m, n] = [grid.length, grid[0].length]; + + const dfs = (i: number, j: number) => { + if (i < 0 || m <= i || j < 0 || n <= j || [0, 2].includes(grid[i][j])) return; + + grid[i][j] = 2; + const dir = [-1, 0, 1, 0, -1]; + for (let k = 0; k < 4; k++) { + const [y, x] = [i + dir[k], j + dir[k + 1]]; + dfs(y, x); + } + }; + + const count = () => { + let c = 0; + + for (let i = 0; i < m; i++) { + for (let j = 0; j < n; j++) { + if (grid[i][j] === 1) { + dfs(i, j); + c++; + } + } + } + + for (let i = 0; i < m; i++) { + for (let j = 0; j < n; j++) { + if (grid[i][j] === 2) { + grid[i][j] = 1; + } + } + } + + return c; + }; + + if (count() !== 1) return 0; + + for (let i = 0; i < m; i++) { + for (let j = 0; j < n; j++) { + if (grid[i][j] === 1) { + grid[i][j] = 0; + + if (count() !== 1) return 1; + + grid[i][j] = 1; + } + } + } + + return 2; +} +``` + #### JavaScript ```js diff --git a/solution/1500-1599/1568.Minimum Number of Days to Disconnect Island/README_EN.md b/solution/1500-1599/1568.Minimum Number of Days to Disconnect Island/README_EN.md index 1770738b97e1a..f3cffd9828e2e 100644 --- a/solution/1500-1599/1568.Minimum Number of Days to Disconnect Island/README_EN.md +++ b/solution/1500-1599/1568.Minimum Number of Days to Disconnect Island/README_EN.md @@ -286,6 +286,64 @@ func minDays(grid [][]int) int { } ``` +#### TypeScript + +```ts +function minDays(grid: number[][]): number { + const [m, n] = [grid.length, grid[0].length]; + + const dfs = (i: number, j: number) => { + if (i < 0 || m <= i || j < 0 || n <= j || [0, 2].includes(grid[i][j])) return; + + grid[i][j] = 2; + const dir = [-1, 0, 1, 0, -1]; + for (let k = 0; k < 4; k++) { + const [y, x] = [i + dir[k], j + dir[k + 1]]; + dfs(y, x); + } + }; + + const count = () => { + let c = 0; + + for (let i = 0; i < m; i++) { + for (let j = 0; j < n; j++) { + if (grid[i][j] === 1) { + dfs(i, j); + c++; + } + } + } + + for (let i = 0; i < m; i++) { + for (let j = 0; j < n; j++) { + if (grid[i][j] === 2) { + grid[i][j] = 1; + } + } + } + + return c; + }; + + if (count() !== 1) return 0; + + for (let i = 0; i < m; i++) { + for (let j = 0; j < n; j++) { + if (grid[i][j] === 1) { + grid[i][j] = 0; + + if (count() !== 1) return 1; + + grid[i][j] = 1; + } + } + } + + return 2; +} +``` + #### JavaScript ```js diff --git a/solution/1500-1599/1568.Minimum Number of Days to Disconnect Island/Solution.ts b/solution/1500-1599/1568.Minimum Number of Days to Disconnect Island/Solution.ts new file mode 100644 index 0000000000000..7837bdadff4a5 --- /dev/null +++ b/solution/1500-1599/1568.Minimum Number of Days to Disconnect Island/Solution.ts @@ -0,0 +1,53 @@ +function minDays(grid: number[][]): number { + const [m, n] = [grid.length, grid[0].length]; + + const dfs = (i: number, j: number) => { + if (i < 0 || m <= i || j < 0 || n <= j || [0, 2].includes(grid[i][j])) return; + + grid[i][j] = 2; + const dir = [-1, 0, 1, 0, -1]; + for (let k = 0; k < 4; k++) { + const [y, x] = [i + dir[k], j + dir[k + 1]]; + dfs(y, x); + } + }; + + const count = () => { + let c = 0; + + for (let i = 0; i < m; i++) { + for (let j = 0; j < n; j++) { + if (grid[i][j] === 1) { + dfs(i, j); + c++; + } + } + } + + for (let i = 0; i < m; i++) { + for (let j = 0; j < n; j++) { + if (grid[i][j] === 2) { + grid[i][j] = 1; + } + } + } + + return c; + }; + + if (count() !== 1) return 0; + + for (let i = 0; i < m; i++) { + for (let j = 0; j < n; j++) { + if (grid[i][j] === 1) { + grid[i][j] = 0; + + if (count() !== 1) return 1; + + grid[i][j] = 1; + } + } + } + + return 2; +} From 8ab6773599aeab01a1ca38c191dc5dbb2af05daf Mon Sep 17 00:00:00 2001 From: rain84 Date: Sun, 11 Aug 2024 22:10:59 +0300 Subject: [PATCH 2/2] feat: update js solution to lc problem: No.1568 --- .../README.md | 66 ++++++++----------- .../README_EN.md | 66 ++++++++----------- .../Solution.js | 64 ++++++++---------- 3 files changed, 80 insertions(+), 116 deletions(-) diff --git a/solution/1500-1599/1568.Minimum Number of Days to Disconnect Island/README.md b/solution/1500-1599/1568.Minimum Number of Days to Disconnect Island/README.md index e432fb37b1ebd..568014ba15f6b 100644 --- a/solution/1500-1599/1568.Minimum Number of Days to Disconnect Island/README.md +++ b/solution/1500-1599/1568.Minimum Number of Days to Disconnect Island/README.md @@ -361,54 +361,42 @@ function minDays(grid: number[][]): number { * @return {number} */ var minDays = function (grid) { - const directions = [ - [0, 1], - [1, 0], - [0, -1], - [-1, 0], - ]; - const rows = grid.length; - const cols = grid[0].length; - - function dfs(x, y, visited) { - visited[x][y] = true; - for (let [dx, dy] of directions) { - const nx = x + dx, - ny = y + dy; - if ( - nx >= 0 && - ny >= 0 && - nx < rows && - ny < cols && - grid[nx][ny] === 1 && - !visited[nx][ny] - ) { - dfs(nx, ny, visited); - } + const dirs = [-1, 0, 1, 0, -1]; + const [m, n] = [grid.length, grid[0].length]; + + const dfs = (i, j, visited) => { + if (i < 0 || m <= i || j < 0 || n <= j || grid[i][j] === 0 || visited[i][j]) { + return; } - } - function countIslands() { - let visited = Array.from({ length: rows }, () => Array(cols).fill(false)); - let count = 0; - for (let i = 0; i < rows; i++) { - for (let j = 0; j < cols; j++) { - if (grid[i][j] === 1 && !visited[i][j]) { - count++; - dfs(i, j, visited); + visited[i][j] = true; + for (let d = 0; d < 4; d++) { + const [y, x] = [i + dirs[d], j + dirs[d + 1]]; + dfs(y, x, visited); + } + }; + + const count = () => { + const vis = Array.from({ length: m }, () => Array(n).fill(false)); + let c = 0; + for (let i = 0; i < m; i++) { + for (let j = 0; j < n; j++) { + if (grid[i][j] === 1 && !vis[i][j]) { + c++; + dfs(i, j, vis); } } } - return count; - } + return c; + }; - if (countIslands() !== 1) return 0; + if (count() !== 1) return 0; - for (let i = 0; i < rows; i++) { - for (let j = 0; j < cols; j++) { + for (let i = 0; i < m; i++) { + for (let j = 0; j < n; j++) { if (grid[i][j] === 1) { grid[i][j] = 0; - if (countIslands() !== 1) return 1; + if (count() !== 1) return 1; grid[i][j] = 1; } } diff --git a/solution/1500-1599/1568.Minimum Number of Days to Disconnect Island/README_EN.md b/solution/1500-1599/1568.Minimum Number of Days to Disconnect Island/README_EN.md index f3cffd9828e2e..8c5a1bb172226 100644 --- a/solution/1500-1599/1568.Minimum Number of Days to Disconnect Island/README_EN.md +++ b/solution/1500-1599/1568.Minimum Number of Days to Disconnect Island/README_EN.md @@ -352,54 +352,42 @@ function minDays(grid: number[][]): number { * @return {number} */ var minDays = function (grid) { - const directions = [ - [0, 1], - [1, 0], - [0, -1], - [-1, 0], - ]; - const rows = grid.length; - const cols = grid[0].length; - - function dfs(x, y, visited) { - visited[x][y] = true; - for (let [dx, dy] of directions) { - const nx = x + dx, - ny = y + dy; - if ( - nx >= 0 && - ny >= 0 && - nx < rows && - ny < cols && - grid[nx][ny] === 1 && - !visited[nx][ny] - ) { - dfs(nx, ny, visited); - } + const dirs = [-1, 0, 1, 0, -1]; + const [m, n] = [grid.length, grid[0].length]; + + const dfs = (i, j, visited) => { + if (i < 0 || m <= i || j < 0 || n <= j || grid[i][j] === 0 || visited[i][j]) { + return; } - } - function countIslands() { - let visited = Array.from({ length: rows }, () => Array(cols).fill(false)); - let count = 0; - for (let i = 0; i < rows; i++) { - for (let j = 0; j < cols; j++) { - if (grid[i][j] === 1 && !visited[i][j]) { - count++; - dfs(i, j, visited); + visited[i][j] = true; + for (let d = 0; d < 4; d++) { + const [y, x] = [i + dirs[d], j + dirs[d + 1]]; + dfs(y, x, visited); + } + }; + + const count = () => { + const vis = Array.from({ length: m }, () => Array(n).fill(false)); + let c = 0; + for (let i = 0; i < m; i++) { + for (let j = 0; j < n; j++) { + if (grid[i][j] === 1 && !vis[i][j]) { + c++; + dfs(i, j, vis); } } } - return count; - } + return c; + }; - if (countIslands() !== 1) return 0; + if (count() !== 1) return 0; - for (let i = 0; i < rows; i++) { - for (let j = 0; j < cols; j++) { + for (let i = 0; i < m; i++) { + for (let j = 0; j < n; j++) { if (grid[i][j] === 1) { grid[i][j] = 0; - if (countIslands() !== 1) return 1; + if (count() !== 1) return 1; grid[i][j] = 1; } } diff --git a/solution/1500-1599/1568.Minimum Number of Days to Disconnect Island/Solution.js b/solution/1500-1599/1568.Minimum Number of Days to Disconnect Island/Solution.js index f41f97324fee1..8bf62047d1836 100644 --- a/solution/1500-1599/1568.Minimum Number of Days to Disconnect Island/Solution.js +++ b/solution/1500-1599/1568.Minimum Number of Days to Disconnect Island/Solution.js @@ -3,54 +3,42 @@ * @return {number} */ var minDays = function (grid) { - const directions = [ - [0, 1], - [1, 0], - [0, -1], - [-1, 0], - ]; - const rows = grid.length; - const cols = grid[0].length; + const dirs = [-1, 0, 1, 0, -1]; + const [m, n] = [grid.length, grid[0].length]; - function dfs(x, y, visited) { - visited[x][y] = true; - for (let [dx, dy] of directions) { - const nx = x + dx, - ny = y + dy; - if ( - nx >= 0 && - ny >= 0 && - nx < rows && - ny < cols && - grid[nx][ny] === 1 && - !visited[nx][ny] - ) { - dfs(nx, ny, visited); - } + const dfs = (i, j, visited) => { + if (i < 0 || m <= i || j < 0 || n <= j || grid[i][j] === 0 || visited[i][j]) { + return; } - } - function countIslands() { - let visited = Array.from({ length: rows }, () => Array(cols).fill(false)); - let count = 0; - for (let i = 0; i < rows; i++) { - for (let j = 0; j < cols; j++) { - if (grid[i][j] === 1 && !visited[i][j]) { - count++; - dfs(i, j, visited); + visited[i][j] = true; + for (let d = 0; d < 4; d++) { + const [y, x] = [i + dirs[d], j + dirs[d + 1]]; + dfs(y, x, visited); + } + }; + + const count = () => { + const vis = Array.from({ length: m }, () => Array(n).fill(false)); + let c = 0; + for (let i = 0; i < m; i++) { + for (let j = 0; j < n; j++) { + if (grid[i][j] === 1 && !vis[i][j]) { + c++; + dfs(i, j, vis); } } } - return count; - } + return c; + }; - if (countIslands() !== 1) return 0; + if (count() !== 1) return 0; - for (let i = 0; i < rows; i++) { - for (let j = 0; j < cols; j++) { + for (let i = 0; i < m; i++) { + for (let j = 0; j < n; j++) { if (grid[i][j] === 1) { grid[i][j] = 0; - if (countIslands() !== 1) return 1; + if (count() !== 1) return 1; grid[i][j] = 1; } }