程序通过翻转Python中的每一行元素来查找最大和

假设我们有一个二维二进制矩阵。对于给定矩阵中的任何行或列,我们都可以翻转所有位。如果我们可以执行任意数量的这些操作,并且将每一行都视为二进制数,则必须找到可以由这些数字构成的最大和。

所以,如果输入像

010
001

则输出将为11,就像翻转两行得到101和110一样,则总和为5 + 6 = 11

为了解决这个问题,我们将遵循以下步骤-

  • 对于矩阵中的每一行r

    • 对于0到r大小的范围内的i,执行

    • r [i]:= -r [i] + 1

    • 如果r [0]等于0,则

    • 对于范围1到矩阵列大小的j,执行

      • 对于范围从0到矩阵行大小的i,执行

      • 矩阵[i,j]:=-矩阵[i,j] + 1

      • cnt:= cnt + 1,如果matrix [i,j]为1,否则为-1

      • cnt:= 0

      • 对于范围在0到矩阵行数的i,执行

      • 如果cnt <0,则

      • 回答:= 0

      • 对于矩阵中的每一行r

        • a:= 2 * a + v

        • a:= 0

        • 对于r中的每个v

        • ans:= ans + a

      • 返回ans

      让我们看下面的实现以更好地理解-

      示例

      class Solution:
         def solve(self, matrix):
            for r in matrix:
               if r[0] == 0:
                  for i in range(len(r)):
                     r[i] = -r[i] + 1
            for j in range(1, len(matrix[0])):
               cnt = 0
               for i in range(len(matrix)):
                  cnt += 1 if matrix[i][j] else -1
                  if cnt < 0:
                     for i in range(len(matrix)):
                        matrix[i][j] = -matrix[i][j] + 1
            ans = 0
            for r in matrix:
               a = 0
               for v in r:
                  a = 2 * a + v
                  ans += a
            return ans
      ob = Solution()matrix = [ [0, 1, 0], [0, 0, 1] ]
      print(ob.solve(matrix))

      输入值

      [[0, 1, 0],[0, 0, 1]]

      输出结果

      11