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

提示:

  1. 1 <= A.length <= 20
  2. 1 <= A[0].length <= 20
  3. A[i][j] 是 0 或 1

解题思路:对每一行,如果该行第一个数为0,那么翻转这一行。

      对每一列,比较该列0和1的个数,若0的个数大于行数一半,则翻转该列。

      先翻转列,再翻转行。

class Solution {
public:
    int matrixScore(vector<vector<int>>& A) {
       int rowindex=A.size();
       int columnindex=A[0].size();
       for(int i=0;i<rowindex;i++)
       {
           if(A[i][0]==0)
           {
               for(int j=0;j<columnindex;j++)
               {
                    A[i][j]=1-A[i][j];
               }
           }
       }
       for(int j=0;j<columnindex;j++)
       {
           int cnt=0;
           for(int i=0;i<rowindex;i++)
           {
               if(A[i][j]==1)
                   cnt++;
           }
           if(cnt<=rowindex/2)
           {
               for(int i=0;i<rowindex;i++)
              {
                  A[i][j]=1-A[i][j];
              }
           }
       }

        int res=0;
        for(int i=0;i<rowindex;i++)
        {
            for(int j=0;j<columnindex;j++)
                res=res+A[i][j]*pow(2,columnindex-1-j);
        }
        return res;
    }
};

原文地址:https://www.cnblogs.com/-xinxin/p/10630980.html

时间: 2024-10-08 06:13:22

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]] 解释: 首先翻转每一行: [