832. 翻转图像

154 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第7天,点击查看活动详情

题目 leetcode.cn/

  • 给定一个 n x n 的二进制矩阵 image ,先 水平 翻转图像,然后 反转 图像并返回 结果 。
  • 水平翻转图片就是将图片的每一行都进行翻转,即逆序。
    • 例如,水平翻转 [1,1,0] 的结果是 [0,1,1]
  • 反转图片的意思是图片中的 0 全部被 1 替换, 1 全部被 0 替换。
    • 例如,反转 [0,1,1] 的结果是 [1,0,0]

示例

  • 输入: image = [[1,1,0],[1,0,1],[0,0,0]]

  • 输出: [[1,0,0],[0,1,0],[1,1,1]]

  • 解释

    • 首先翻转每一行: [[0,1,1],[1,0,1],[0,0,0]];
    • 然后反转图片: [[1,0,0],[0,1,0],[1,1,1]]
  • 输入: image = [[1,1,0,0],[1,0,0,1],[0,1,1,1],[1,0,1,0]]

  • 输出: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]

  • 解释

    • 首先翻转每一行: [[0,0,1,1],[1,0,0,1],[1,1,1,0],[0,1,0,1]];
    • 然后反转图片: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]

提示

  • n == image.length
  • n == image[i].length
  • 1 <= n <= 20
  • images[i][j] == 0 或 1.

代码

function flipAndInvertImage(image: number[][]): number[][] {
    let result = [];
    for(let i = 0; i < image.length; i++){
        let item = [];
        for(let j = image[i].length - 1; j >= 0; j--){
            if(image[i][j]){
                item.push(0);
            } else {
                item.push(1);
            }
        }
        result.push(item)
    }
    return result;
};

思路

  • 首先分析下题目的意思
    • 其实题目说的很明白,翻转反转,翻转就是将数组中前后的顺序颠倒过来,反转就是将数字0变成1,数字1变成0
  • 了解清楚要干什么后就可以开始了
    • 首先第一步就是要翻转数组了,其实大概率会想到数组的reverse方法,因为这个方法就是用来颠倒数组前后顺序的,但是我们这里不写这个,因为写这个方法的话每一个子数组都要调用一遍这个方法
    • 这里在内循环遍历的时候从数组的最后一位开始读取,并且读取的时候顺便判断他的值,如果是0就赋值为1,如果是1就赋值为0,这样就实现了翻转和反转一步到位,不用每次外循环都要先调用数组的reverse方法了