看板 Marginalman
2257. Count Unguarded Cells in the Grid 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