【LeetCode】832。画像の反転(簡単)(JAVA)
タイトルアドレス:https://leetcode.com/problems/perfect-squares/
タイトル説明:
バイナリ行列Aが与えられた場合、画像を水平方向に反転してから反転し、結果の画像を返します。
画像を水平方向に反転するとは、画像の各行が反転することを意味します。たとえば、[1、1、0]を水平方向に反転すると、[0、1、1]になります。
画像を反転するとは、各0が1に置き換えられ、各1が0に置き換えられることを意味します。たとえば、[0、1、1]を反転すると、[1、0、0]になります。
例1:
Input: [[1,1,0],[1,0,1],[0,0,0]]
Output: [[1,0,0],[0,1,0],[1,1,1]]
Explanation: First reverse each row: [[0,1,1],[1,0,1],[0,0,0]].
Then, invert the image: [[1,0,0],[0,1,0],[1,1,1]]
例2:
Input: [[1,1,0,0],[1,0,0,1],[0,1,1,1],[1,0,1,0]]
Output: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]
Explanation: First reverse each row: [[0,0,1,1],[1,0,0,1],[1,1,1,0],[0,1,0,1]].
Then invert the image: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]
ノート:
- 1 <= A.length = A [0] .length <= 20
- 0 <= A [i] [j] <= 1
一般的なアイデア
バイナリ行列Aが与えられた場合、最初に画像を水平方向に反転し、次に画像を反転して結果を返します。
画像を水平方向に反転することは、画像の各行を反転すること、つまり順序を逆にすることです。たとえば、水平反転[1、1、0]の結果は[0、1、1]です。
画像を反転すると、画像内のすべての0が1に置き換えられ、すべての1が0に置き換えられます。たとえば、[0、1、1]を逆にすると、[1、0、0]になります。
問題解決方法
- 各行を反転するには、頭と尾の位置を変更するだけです
- 交換中、番号も逆になります
class Solution {
public int[][] flipAndInvertImage(int[][] A) {
for (int i = 0; i < A.length; i++) {
int start = 0;
int end = A[i].length - 1;
while (start < end) {
int temp = A[i][start];
A[i][start] = A[i][end] == 1 ? 0 : 1;
A[i][end] = temp == 1 ? 0 : 1;
start++;
end--;
}
if (start == end) A[i][start] = A[i][start] == 1 ? 0 : 1;
}
return A;
}
}
実行時間:0ミリ秒、Javaユーザーの100.00%を上回っています
メモリ消費量:38.6 MB、Javaユーザーの67.02%を上回っています