LeetCode 861. 翻转矩阵后的得分

有一个二维矩阵 A 其中每个元素的值为 0 或 1 。

移动是指选择任一行或列,并转换该行或列中的每一个值:将所有 0 都更改为 1,将所有 1 都更改为 0

在做出任意次数的移动后,将该矩阵的每一行都按照二进制数来解释,矩阵的得分就是这些数字的总和。

返回尽可能高的分数。

示例:

输入:[[0,0,1,1],[1,0,1,0],[1,1,0,0]]
输出:39
解释:
转换为 [[1,1,1,1],[1,0,0,1],[1,1,1,1]]
0b1111 + 0b1001 + 0b1111 = 15 + 9 + 15 = 39

简单的贪心策略。先保证每一行开头都为0,然后保证每列尽可能多一些1。

class Solution {
public:
    int matrixScore(vector<vector<int>>& A) {
        if(A.size() == 0 || A[0].size() == 0) {
            return 0;
        }
        int row = A.size(), column = A[0].size(), sum = 0;
        for(int i = 0; i < row; i++) {
            if(A[i][0] == 0) {
                for(int j = 0; j < column; j++) {
                    A[i][j] = 1 - A[i][j];
                }
            }
        }
        for(int j = 0; j < column; j++) {
            int zero = 0, one = 0;
            for(int i = 0; i < row; i++) {
                if(A[i][j] == 0) {
                    zero++;
                } else {
                    one++;
                }
            }
            if(zero > one) {
                for(int i = 0; i < row; i++) {
                    A[i][j] = 1 - A[i][j];
                }
            }
        }
        for(int i = 0; i < row; i++) {
            for(int j = 0; j < column; j++) {
                sum += A[i][j] * pow(2, column - j - 1);
            }
        }
        return sum;
    }
};

原文地址:https://www.cnblogs.com/hlk09/p/9735896.html

时间: 2024-10-08 19:24:51

LeetCode 861. 翻转矩阵后的得分的相关文章

LeetCode 中级 - 翻转矩阵后的得分(861)

有一个二维矩阵 A 其中每个元素的值为 0 或 1 . 移动是指选择任一行或列,并转换该行或列中的每一个值:将所有 0 都更改为 1,将所有 1 都更改为 0. 在做出任意次数的移动后,将该矩阵的每一行都按照二进制数来解释,矩阵的得分就是这些数字的总和. 返回尽可能高的分数. 示例: 输入:[[0,0,1,1],[1,0,1,0],[1,1,0,0]] 输出:39 解释: 转换为 [[1,1,1,1],[1,0,0,1],[1,1,1,1]] 0b1111 + 0b1001 + 0b1111 =

力扣——翻转矩阵后的得分

有一个二维矩阵 A 其中每个元素的值为 0 或 1 . 移动是指选择任一行或列,并转换该行或列中的每一个值:将所有 0 都更改为 1,将所有 1 都更改为 0. 在做出任意次数的移动后,将该矩阵的每一行都按照二进制数来解释,矩阵的得分就是这些数字的总和. 返回尽可能高的分数. 示例: 输入:[[0,0,1,1],[1,0,1,0],[1,1,0,0]] 输出:39 解释: 转换为 [[1,1,1,1],[1,0,0,1],[1,1,1,1]] 0b1111 + 0b1001 + 0b1111 =

90度翻转矩阵

/** * 一张图像表示成NxN的矩阵,图像中每个像素是4个字节,写一个函数把图像旋转90度. * 要求进行原地操作!(即不开辟额外的存储空间) * * 可以分两步走. 第一步交换主对角线两侧的对称元素,第二步交换第i行和第n-1-i行,即得到结果 * 原图: 第一步操作后: 第二步操作后: * 1 2 3 4 1 5 9 13 4 8 12 16 * 5 6 7 8 2 6 10 14 3 7 11 15 * 9 10 11 12 3 7 11 15 2 6 10 14 * 13 14 15

leetcode python翻转字符串里的单词

# Leetcode 151 翻转字符串里的单词### 题目描述给定一个字符串,逐个翻转字符串中的每个单词. **示例1:** 输入: "the sky is blue" 输出: "blue is sky the" **示例2:** 输入: " hello world! " 输出: "world! hello" 解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括. **示例3:** 输入: "

LeetCode:螺旋矩阵【54】

LeetCode:螺旋矩阵[54] 题目描述 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] 输出: [1,2,3,6,9,8,7,4,5] 示例 2: 输入: [ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12] ] 输出: [1,2,3,4,8,12,11,10,9,5,6,7] 题目分析 这道题简直

Leetcode 856. Score of Parentheses 括号得分(栈)

Leetcode 856. Score of Parentheses 括号得分(栈) 题目描述 字符串S包含平衡的括号(即左右必定匹配),使用下面的规则计算得分 () 得1分 AB 得A+B的分,比如()()得2分 (A) 得2A分, 比如(()())得2(1+1)分 测试样例 Example 1: Input: "()" Output: 1 Example 2: Input: "(())" Output: 2 Example 3: Input: "()(

[LeetCode] Score After Flipping Matrix 翻转数组后的分数

We have a two dimensional matrix?A?where each value is?0?or?1. A move consists of choosing any row or column, and toggling each value in that row or column: changing all?0s to?1s, and all?1s to?0s. After making any number of moves, every row of this

[LeetCode] Random Flip Matrix 随机翻转矩阵

You are given the number of rows n_rows and number of columns n_cols of a 2D binary matrix where all values are initially 0. Write a function flip which chooses a 0 value uniformly at random, changes it to 1, and then returns the position [row.id, co

Leetcode 832.翻转图像

1.题目描述 给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果. 水平翻转图片就是将图片的每一行都进行翻转,即逆序.例如,水平翻转 [1, 1, 0] 的结果是 [0, 1, 1]. 反转图片的意思是图片中的 0 全部被 1 替换, 1 全部被 0 替换.例如,反转 [0, 1, 1] 的结果是 [1, 0, 0]. 示例 1: 输入: [[1,1,0],[1,0,1],[0,0,0]] 输出: [[1,0,0],[0,1,0],[1,1,1]] 解释: 首先翻转每一行: [