Untitled
unknown
java
a year ago
3.1 kB
10
Indexable
/* // Definition for a QuadTree node. class Node { public boolean val; public boolean isLeaf; public Node topLeft; public Node topRight; public Node bottomLeft; public Node bottomRight; public Node() { this.val = false; this.isLeaf = false; this.topLeft = null; this.topRight = null; this.bottomLeft = null; this.bottomRight = null; } public Node(boolean val, boolean isLeaf) { this.val = val; this.isLeaf = isLeaf; this.topLeft = null; this.topRight = null; this.bottomLeft = null; this.bottomRight = null; } public Node(boolean val, boolean isLeaf, Node topLeft, Node topRight, Node bottomLeft, Node bottomRight) { this.val = val; this.isLeaf = isLeaf; this.topLeft = topLeft; this.topRight = topRight; this.bottomLeft = bottomLeft; this.bottomRight = bottomRight; } } */ class Solution { public static Node construct(int[][] grid) { int n = grid.length; return construct(grid, 0, 0, n - 1, n - 1); } private static Node construct(int[][] grid, int x1, int y1, int x2, int y2) { if (x1 < 0 || x1 >= grid.length || x2 < 0 || x2 >= grid.length || y1 < 0 || y1 >= grid.length || y2 < 0 || y2 >= grid.length || x1 > x2 || y1 > y2) { return null; } if (x1 == x2 && y1 == y2) { boolean flag = grid[x1][y1] == 1 ? true : false; return new Node(flag, true); } int newX2 = x1 + (x2 - x1)/2; int newY2 = y1 + (y2 - y1)/2; //System.out.println("Top left going to (" + x1 + " - " + y1 + " " + newX2 + " - " + newY2 + ") "); Node topLeft = construct(grid, x1, y1, newX2 , newY2); int newY1 = y1 + (y2 - y1)/2 + 1; newX2 = x1 + (x2 - x1)/2; // System.out.println("Top right going to (" + x1 + " - " + newY1 + " " + newX2 + " - " + y2 + ") "); Node topRight = construct(grid, x1, newY1, newX2, y2); int newX1 = x1 + (x2 - x1)/2 + 1; newY2 = y1 + (y2 - y1)/2; // System.out.println("Bottom left going to (" + newX1 + " - " + y1 + " " + x2 + " - " + newY2 + ") "); Node bottomLeft = construct(grid, newX1, y1, x2, newY2); newX1 = x1 + (x2 - x1)/2 + 1; newY1 = y1 + (y2 - y1)/2 + 1; // System.out.println("Bottom right going to (" + newX1 + " - " + newY1 + " " + x2 + " - " + y2 + ") "); Node bottomRight = construct(grid, newX1, newY1, x2, y2); if (topLeft == null && topRight == null && bottomLeft == null && bottomRight == null) { boolean flag = grid[x1][y1] == 1 ? true : false; return new Node(flag, true); } if (topLeft.val == topRight.val && topRight.val == bottomLeft.val && bottomLeft.val == bottomRight.val) { return new Node(topLeft.val, true); } return new Node(topLeft.val, false, topLeft, topRight, bottomLeft, bottomRight); } }
Editor is loading...
Leave a Comment