zoukankan      html  css  js  c++  java
  • 832. 翻转图像『简单』

    题目来源于力扣(LeetCode

    一、题目

    832. 翻转图像

    题目相关标签:数组

    提示:

    • 1 <= A.length = A[0].length <= 20
    • 0 <= A[i][j] <= 1

    二、解题思路

    1. 存在规律:先翻转再反转,而二维数组中的元素只有 0 和 1 两种

    2. 通过左右双指针来遍历矩阵中的每个一维数组

    3. 要翻转的左右两个元素相同时,两个数字都进行取反(即 0 变成 1,1 变成 0),取反后的结果相当于既完成了翻转,也同时完成了反转

    4. 翻转的两个元素不同时,不需要改变(因为只有 0 和 1 两个元素,翻转后再反转等于没变

    三、代码实现

    public static int[][] flipAndInvertImage(int[][] A) {
        for (int i = 0; i < A.length; i++) {
            int[] arr = A[i];
            int left = 0;
            int right = arr.length - 1;
            // 双指针遍历每个矩阵行
            while (left <= right) {
                // 规律,要翻转的两个数字相同时,两个数字都取反(即 0 变成 1,1 变成 0)
                // 既完成了翻转,也同时完成了反转
                // 要翻转的数字不同时,不需要改变(因为只有 0 和 1 两个元素,翻转后再反转等于没变)
                if (arr[left] == arr[right]) {
                    if (arr[left] == 0) {
                        arr[left] = 1;
                        arr[right] = 1;
                    } else {
                        arr[left] = 0;
                        arr[right] = 0;
                    }
                }
                left ++;
                right --;
            }
        }
        return A;
    }
    

    四、执行用时

    五、部分测试用例

    public static void main(String[] args) {
        int[][] A = {{1, 1, 0}, {1, 0, 1}, {0, 0, 0}};
    	//  output: {{1, 0, 0}, {0, 1, 0}, {1, 1, 1}}
    
    //    int[][] A = {{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}}
    
        flipAndInvertImage(A);
        System.out.println(Arrays.toString(A));
    }
    
  • 相关阅读:
    (四)使用SecureCRTPortable 连接虚拟机 安装jdk
    (三)配置本地YUM源
    (二) 配置 centos6.7
    docker学习
    linux磁盘情况查看处理
    日志文件切割
    已有项目创建git
    微擎绑定开放平台后依然拿不到唯一id?
    php7 安装mongodb扩展
    mongodb 学习
  • 原文地址:https://www.cnblogs.com/zhiyin1209/p/13095930.html
Copyright © 2011-2022 走看看