【LeetCode】832。画像の反転(簡単)(JAVA)

【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]になります。

問題解決方法

  1. 各行を反転するには、頭と尾の位置を変更するだけです
  2. 交換中、番号も逆になります
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%を上回っています

私の公式アカウントに注意を払うことを歓迎します、LeetCodeは毎日1つの質問を更新します

おすすめ

転載: blog.csdn.net/qq_16927853/article/details/114015772