Welcome to Subscribe On Youtube

832. Flipping an Image

Description

Given an n x n binary matrix image, flip the image horizontally, then invert it, and return the resulting image.

To flip an image horizontally means that each row of the image is reversed.

  • For example, flipping [1,1,0] horizontally results in [0,1,1].

To invert an image means that each 0 is replaced by 1, and each 1 is replaced by 0.

  • For example, inverting [0,1,1] results in [1,0,0].

 

Example 1:

Input: image = [[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]]

Example 2:

Input: image = [[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]]

 

Constraints:

  • n == image.length
  • n == image[i].length
  • 1 <= n <= 20
  • images[i][j] is either 0 or 1.

Solutions

  • class Solution {
        public int[][] flipAndInvertImage(int[][] image) {
            for (var row : image) {
                int i = 0, j = row.length - 1;
                for (; i < j; ++i, --j) {
                    if (row[i] == row[j]) {
                        row[i] ^= 1;
                        row[j] ^= 1;
                    }
                }
                if (i == j) {
                    row[i] ^= 1;
                }
            }
            return image;
        }
    }
    
  • class Solution {
    public:
        vector<vector<int>> flipAndInvertImage(vector<vector<int>>& image) {
            for (auto& row : image) {
                int i = 0, j = row.size() - 1;
                for (; i < j; ++i, --j) {
                    if (row[i] == row[j]) {
                        row[i] ^= 1;
                        row[j] ^= 1;
                    }
                }
                if (i == j) {
                    row[i] ^= 1;
                }
            }
            return image;
        }
    };
    
  • class Solution:
        def flipAndInvertImage(self, image: List[List[int]]) -> List[List[int]]:
            n = len(image)
            for row in image:
                i, j = 0, n - 1
                while i < j:
                    if row[i] == row[j]:
                        row[i] ^= 1
                        row[j] ^= 1
                    i, j = i + 1, j - 1
                if i == j:
                    row[i] ^= 1
            return image
    
    
  • func flipAndInvertImage(image [][]int) [][]int {
    	for _, row := range image {
    		i, j := 0, len(row)-1
    		for ; i < j; i, j = i+1, j-1 {
    			if row[i] == row[j] {
    				row[i] ^= 1
    				row[j] ^= 1
    			}
    		}
    		if i == j {
    			row[i] ^= 1
    		}
    	}
    	return image
    }
    
  • /**
     * @param {number[][]} image
     * @return {number[][]}
     */
    var flipAndInvertImage = function (image) {
        for (const row of image) {
            let i = 0;
            let j = row.length - 1;
            for (; i < j; ++i, --j) {
                if (row[i] == row[j]) {
                    row[i] ^= 1;
                    row[j] ^= 1;
                }
            }
            if (i == j) {
                row[i] ^= 1;
            }
        }
        return image;
    };
    
    

All Problems

All Solutions