问题描述:walter有一个n*m大小的网格,最初每个单元格都是白色的。沃尔特可以画一个水平或垂直的笔划,可以是一个或多个单元格长沃尔特只画红色的水平笔划和蓝色的垂直笔划沃尔特从不画两个水平或两个垂直笔划重叠。如果水平笔划与垂直笔划交叉,则单元格的颜色为绿色。给定具有单元格颜色模式的字符串,找到实现该字符串所需的红色和蓝色笔划数。
输入:{“GRG”,“BGW”,“WWW”}OP:2红色和3蓝色笔划
最佳答案
import java.util.*;
public class GridColouring {
public static int getStrokes(String [] grid) {
int N = grid.length;
int M = grid[0].length();
HashSet<Integer> hr = new HashSet<>();
HashSet<Integer> v = new HashSet<>();
int count = 0;
for (int i = 0; i < N; i++) {
String row = grid[i];
row = row.toUpperCase();
for (int j = 0; j < M; j++) {
// Precedence of 'and' greater than 'or'
if (row.charAt(j) == 'G' || (row.charAt(j) == 'R' && !hr.contains(i))) {
hr.add(i);
} else if (hr.contains(i)) {
if (j > 0 && grid[i].charAt(j - 1) == 'B') {
count++;
}
}
if (row.charAt(j) == 'G' || (row.charAt(j) == 'B' && !v.contains(j))) {
v.add(j);
} else if(v.contains(j)) {
if (i > 0 && grid[i-1].charAt(j) == 'R') {
count++;
}
}
}
}
int horStrokes = hr.size();
int verStrokes = v.size();
int minStrokes = horStrokes + verStrokes + count;
return minStrokes;
}
public static void main(String [] args) {
String [] a = {"GR.","BG.","RBR","BBB"};
System.out.println(getStrokes(a));
}
}
输出:8
关于java - 网格着色游戏:查找绘制的红色和蓝色线条的数量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33183521/