https://leetcode.com/problems/count-unguarded-cells-in-the-grid/
給定數字m,n分別表示長寬,我們在guards陣列的座標裡放置守衛,walls陣列的座標裡
放置牆壁,守衛可以在配置位置的上下左右巡邏,不可以穿過牆壁,求出有幾個格子沒有
放東西但守衛巡邏不到。
思路:
1.直接暴力模擬,我想不到一個方法可以不用穿過別人走過的路,所以就讓每個守衛
都走到撞牆或超出範圍,本來以為會超時沒想到一次就過了,來看看有沒有更優雅
的寫法= =。
java code:
---------------------------------------------------
class Solution {
public int countUnguarded(int m, int n, int[][] guards, int[][] walls) {
int[][] arr = new int[m][n];
for (int[] guard : guards) {
int y = guard[0], x = guard[1];
arr[y][x] = 1;
}
for (int[] wall : walls) {
int y = wall[0], x = wall[1];
arr[y][x] = 2;
}
final int[][] dirs = new int[][]{{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
int cnt = 0;
for (int[] guard : guards) {
for (int[] dir : dirs) {
int y = guard[0], x = guard[1];
while (true) {
y += dir[0];
x += dir[1];
if (y < 0 || x < 0 || y == m || x == n || arr[y][x] > 0) {
break;
}
if (arr[y][x] == 0) {
cnt++;
}
arr[y][x]--;
}
}
}
return m * n - guards.length - walls.length - cnt;
}
}
---------------------------------------------------
--
https://i.imgur.com/O931L58.jpeg
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.158.191.3 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1732201602.A.4DD.html
2257. Count Unguarded Cells in the Grid