leetcode Day63 剑指专项 105-106

80 阅读1分钟

200. 岛屿数量

var numIslands = function(grid) {
    let res=0
    for(let i=0;i<grid.length;i++){
        for(let j=0;j<grid[0].length;j++){
            if(grid[i][j]==='1'){
                res++
                turnZero(i,j,grid)
            }
        }
    }
    return res
}; 

const turnZero=(i,j,grid)=>{
    if(i>=grid.length || i<0 || j>=grid[0].length || j<0 || grid[i][j]==='0')return
    grid[i][j]='0'
    turnZero(i-1,j,grid)
    turnZero(i,j-1,grid)
    turnZero(i+1,j,grid)
    turnZero(i,j+1,grid)
}

剑指 Offer II 105. 岛屿的最大面积

var maxAreaOfIsland = function(grid) {
    const res=[]
    for(let i=0;i<grid.length;i++){
        for(let j=0;j<grid[0].length;j++){
            if(grid[i][j]===1){
                let area=countArea(i,j,0,grid)
                res.push(area)
            }
        }
    }
    return Math.max(...res)<0?0:Math.max(...res)
};
const countArea=(i,j,area,grid)=>{
    grid[i][j]=0
    if(i+1<grid.length && grid[i+1][j]===1)area=countArea(i+1,j,area,grid)
    if(j+1<grid[0].length && grid[i][j+1]===1)area=countArea(i,j+1,area,grid)
    if(i-1>=0 && grid[i-1][j]===1)area=countArea(i-1,j,area,grid)
    if(j-1>=0 && grid[i][j-1]===1)area=countArea(i,j-1,area,grid)
    return area+1
}

剑指 Offer II 106. 二分图

var isBipartite = function(graph) {
    const traverse=(graph,v)=>{
        if(!flag)return
        visited[v]=true
        for(let k of graph[v]){
            if(!visited[k]){
                color[k]=!color[v]
                traverse(graph,k)
            }else{
                if(color[k]===color[v]){
                    flag=false
                }
            }
        }
    }
    let flag=true
    const n=graph.length
    const visited=new Array(n).fill(false)
    const color=new Array(n).fill(false)
    for(let i=0;i<n;i++){
        if(!visited[i]){
            traverse(graph,i)
        }
    }
    return flag
};