Leetcode69场双周赛-第四题5931. 用邮票贴满网格图
生活随笔
收集整理的這篇文章主要介紹了
Leetcode69场双周赛-第四题5931. 用邮票贴满网格图
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
5931. 用郵票貼滿網格圖
題目描述
?
?
?
?
解題思路
查找標志為0的點,嘗試以該點為郵票的左上角,直到嘗試為以該點為郵票的右下角.如果能放郵票,并覆蓋該為0 的點,則把覆蓋的點標志為2。如果不能,直接返回false.
解題代碼
public class solution5931 {private int stampHeight;private int stampWidth;public static void main(String[] args) {int[][] a1 = new int[][]{{1, 0, 0, 0}, {1, 0, 0, 0}, {1, 0, 0, 0}, {1, 0, 0, 0}, {1, 0, 0, 0}};int[][] a2 = new int[][]{{1, 0, 0, 0}, {0, 1, 0, 0}, {0, 0, 1, 0}, {0, 0, 0, 1}};int[][] a3 = new int[][]{{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 1}};boolean b1 = new solution5931().possibleToStamp(a1, 4, 3);boolean b2 = new solution5931().possibleToStamp(a2, 2, 2);boolean b3 = new solution5931().possibleToStamp(a3, 3, 3);System.out.println(b1);System.out.println(b2);System.out.println(b3);}public boolean possibleToStamp(int[][] grid, int stampHeight, int stampWidth) {this.stampHeight = stampHeight;this.stampWidth = stampWidth;int n = grid.length;int n1 = grid[0].length;//遍歷所有標志為0的點for (int i = 0; i < n; i++) {for (int j = 0; j < n1; j++) {if (grid[i][j] == 0) {//此地必須要放//嘗試以該點為郵票的左上角,直到嘗試為以該點為郵票的右下角boolean b = false;int x = -1, y = -1;for (int k = i; k >= Math.max(0, i - stampHeight + 1); k--) {for (int l = j; l >= Math.max(0, j - stampWidth + 1); l--) {boolean c = check(grid, k, l);if (c) {// 檢測結果表明,此票放(k,l)這個位置能夠滿足要求,并能覆蓋住(i1,j1)b = true;x = k;y = l;break;}}if (b) {break;}}if (b) {// 成功在以(x,y)為左上角的地方,放下郵票,把所有被該郵票占據的地方,填上2for (int x1 = x; x1 < x + stampHeight; x1++) {for (int y1 = y; y1 < y + stampWidth; y1++) {grid[x1][y1] = 2;}}} else {// (i1,j1)這個位置無法放郵票return false;}}}}return true;}private boolean check(int[][] grid, int i1, int j1) {if (i1 + stampHeight > grid.length) {// 越界return false;}if (j1 + stampWidth > grid[0].length ) {// 越界return false;}for (int i = i1; i < i1 + stampHeight; i++) {for (int j = j1; j < j1 + stampWidth; j++) {if (grid[i][j] == 1) {// 禁放return false;}}}return true;}}解題結果
非常遺憾的是,沒能在周賽當中寫出結果。第二天重新思考后得出結果,這是目前是我離做出周賽全部四題最近的一次了。繼續加油!!!!
總結
以上是生活随笔為你收集整理的Leetcode69场双周赛-第四题5931. 用邮票贴满网格图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Leetcode69场双周赛-第三题59
- 下一篇: Leetcode70场双周赛-第一题21