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;
}
}
题解有空来写~

浙公网安备 33010602011771号