leetcode 959. 由斜杠划分区域

链接:
https://leetcode-cn.com/problems/regions-cut-by-slashes/

代码如下。

package Leetcode;

import java.util.HashSet;
import java.util.Set;

public class Problem959 {
    public int regionsBySlashes(String[] grid) {
        int n=grid.length;
        int[] f=new int[4*n*n];
        for (int i = 0; i < 4 * n * n; i++) {
            f[i]=i;
        }
        for (int i = 0; i < n; i++) {
            for (int j=0;j<n;j++){
                int id=i*n+j;
                if (i<n-1){
                    int bottom=id+n;//下一行
                    merge(f,id*4+2,bottom*4+0);
                }
                if (j<n-1){
                    int right=id+1;
                    merge(f,id*4+1,right*4+3);
                }
                if (grid[i].charAt(j)=='/'){
                    merge(f,id*4+0,id*4+3);
                    merge(f,id*4+1,id*4+2);
                }
                else if (grid[i].charAt(j)=='\\'){
                    merge(f,id*4+0,id*4+1);
                    merge(f,id*4+2,id*4+3);
                }
                else {

                    merge(f,id*4+0,id*4+1);
                    merge(f,id*4+1,id*4+2);
                    merge(f,id*4+2,id*4+3);
                }
            }
        }
        Set<Integer> set=new HashSet<>();
        for (int i = 0; i < n * n * 4; i++) {
            int fa=find(f,f[i]);
            set.add(fa);
        }
        return set.size();

    }
    public int find(int f[],int x){
        if (f[x]==x)
            return x;
        int fa=find(f,f[x]);
        f[x]=fa;
        return fa;
    }
    public void merge(int[] f,int x,int y){
        int fx=find(f,x);
        int fy=find(f,y);
        f[fx]=fy;
    }
}

题解有空来写~

posted @ 2021-01-26 09:59  withwind777  阅读(81)  评论(0)    收藏  举报