leetcode-pp / 91alg-12-daily-check

2 stars 0 forks source link

dfs+二分 #53

Open adfvcdxv opened 9 months ago

adfvcdxv commented 9 months ago
var swimInWater = function (grid) {
    let n = grid.length
    let low = grid[0][0]
    let high = n * n
    while (low < high) {
        let mid = Math.floor((low + high) / 2)
        if (!isCanSwim(mid, grid)) {
            low = mid + 1
        } else {
            high = mid
        }
    }
    return low
};
const isCanSwim = (t, grid) => {
    let n = grid.length
    let vis = Array.from(Array(n), () => Array(n).fill(false))
    let dfs = (row, col) => {
        if (row < 0 || col < 0 || row >= n || col >= n || vis[row][col] || grid[row][col] > t) {
            return false
        }
        if (row == n - 1 && col == n - 1) {
            return true
        }
        vis[row][col] = true
        return dfs(row + 1, col) || dfs(row - 1, col) || dfs(row, col + 1) || dfs(row, col - 1);
    }
    return dfs(0, 0)
}