Problem Statement |
| You are given two matrices A and B. Each matrix is represented by a String[] containing only '0' and '1' digits. The j-th character of the i-th element is the value at cell (i, j). Your goal is to transform matrix A into matrix B using a series of swaps. On each swap, you choose two adjacent (horizontally, vertically or diagonally) cells in matrix A and swap their values.
There is a limit to the number of times each cell in matrix A can be used. You are given a third matrix count as a String[] containing only digits ('0'-'9'). Cell (i, j) in matrix A can be used in a maximum of count(i, j) swaps. Return the fewest number of swaps required to achieve your goal, or return -1 if it is impossible. |
|
Definition |
| Class: | TransformMatrix | Method: | transform | Parameters: | String[], String[], String[] | Returns: | int | Method signature: | int transform(String[] A, String[] B, String[] count) | (be sure your method is public) |
|
|
|
|
Constraints |
- | A will contain between 1 and 20 elements, inclusive.
|
- | A, B and count will contain the same number of elements.
|
- | Each element of A, B and count will contain between 1 and 20 digits, inclusive.
|
- | Each element of A, B and count will contain the same number of characters.
|
- | Each element of count will contain only digits ('0' to '9').
|
- | Each element of A and B will contain only '0' (zero) and '1' (one) digits. |
|
Examples |
0) | |
| {"110",
"000",
"001"} | {"000",
"110",
"100"} | {"222",
"222",
"222"} |
| Returns: 4 | Here is one of the ways:
(0,0) - (1,1)
(0,1) - (1,0)
(2,2) - (2,1)
(2,1) - (2,0) |
|
|
1) | |
| | Returns: 1 | Just swap the values in the two cells of the matrix. |
|
|
2) | |
| {"111",
"000",
"111"} | {"111",
"000",
"111"} | {"013",
"537",
"136"} |
| Returns: 0 | Matrix A is already equal to matrix B, so no swaps are required. |
|
|
3) | |
| {"001",
"110"} | {"000",
"111"} | {"000",
"111"} |
| Returns: -1 | Here we can't use any cell from row 0. |
|
|
4) | |
| {"100",
"000"} | {"000",
"000"} | {"999",
"999"} |
| Returns: -1 | The two matrices contain a different number of '1's, so it is impossible to transform one into the other. |
|
|
5) | |
| {"011101",
"110000",
"000011",
"000000",
"100000"} | {"110100",
"000011",
"000000",
"110001",
"000010"} | {"305713",
"537211",
"352421",
"242212",
"333313"} |
| Returns: 10 | |
|
6) | |
| {"10",
"00"} | {"00",
"01"} | {"11",
"11"} |
| Returns: 1 | |
|