1+ import java .util .*;
2+
3+ class Solution {
4+ public boolean solution (int [][] key , int [][] lock ) {
5+ boolean answer = false ;
6+
7+ int degree = 0 ;
8+ while (degree < 360 ) {
9+ int [][] new_key = rotate (key , degree );
10+
11+ boolean flag = false ;
12+ for (int i = - new_key .length + 1 ; i < lock .length ; i ++) {
13+ if (answer ) {
14+ break ;
15+ }
16+
17+ for (int j = - new_key [0 ].length + 1 ; j < lock [0 ].length ; j ++) {
18+ if (isSolved (new_key , lock , i , j )) {
19+ answer = true ;
20+ break ;
21+ }
22+ }
23+ }
24+ if (answer ) {
25+ break ;
26+ }
27+
28+ degree += 90 ;
29+ }
30+
31+ return answer ;
32+ }
33+
34+ public boolean isSolved (int [][] key , int [][] lock , int pos_x , int pos_y ) {
35+ boolean result = true ;
36+ for (int i = 0 ; i < lock .length ; i ++) {
37+ if (!result ) {
38+ break ;
39+ }
40+
41+ for (int j = 0 ; j < lock [0 ].length ; j ++) {
42+ if (pos_y <= i && i < pos_y + key .length
43+ && pos_x <= j && j < pos_x + key [0 ].length ) {
44+ if (1 != lock [i ][j ] + key [i - pos_y ][j - pos_x ]) {
45+ result = false ;
46+ break ;
47+ }
48+ }
49+ else if (1 != lock [i ][j ]) {
50+ result = false ;
51+ break ;
52+ }
53+ }
54+ }
55+
56+ return result ;
57+ }
58+
59+ public int [][] rotate (int [][] key , int degree ) {
60+ if (degree == 90 ) {
61+ int [][] new_key = new int [key [0 ].length ][key .length ];
62+ for (int i = 0 ; i < key .length ; i ++) {
63+ for (int j = 0 ; j < key [0 ].length ; j ++) {
64+ new_key [key [0 ].length - j - 1 ][i ] = key [i ][j ];
65+ }
66+ }
67+ return new_key ;
68+ }
69+
70+ if (degree == 180 ) {
71+ int [][] new_key = new int [key .length ][key [0 ].length ];
72+ for (int i = 0 ; i < key .length ; i ++) {
73+ for (int j = 0 ; j < key [0 ].length ; j ++) {
74+ new_key [key .length - i - 1 ][key [0 ].length - j - 1 ] = key [i ][j ];
75+ }
76+ }
77+ return new_key ;
78+ }
79+
80+ if (degree == 270 ) {
81+ int [][] new_key = new int [key [0 ].length ][key .length ];
82+ for (int i = 0 ; i < key .length ; i ++) {
83+ for (int j = 0 ; j < key [0 ].length ; j ++) {
84+ new_key [j ][key .length - i - 1 ] = key [i ][j ];
85+ }
86+ }
87+ return new_key ;
88+ }
89+
90+ return key ;
91+ }
92+ }
0 commit comments