美文网首页
Leetcode 【832、1007】

Leetcode 【832、1007】

作者: 牛奶芝麻 | 来源:发表于2019-06-23 23:46 被阅读0次
    问题描述:【Array】832. Flipping an Image
    解题思路:

    偷个懒水一道,题目即解题方法。时间复杂度 O(n^2),空间复杂度 O(1)。

    Python3 实现:
    class Solution:
        def flipAndInvertImage(self, A: List[List[int]]) -> List[List[int]]:
            row, col = len(A), len(A[0])
            for i in range(row):  # 翻转每行数字
                for j in range(col//2):
                    A[i][j], A[i][col-1-j] = A[i][col-1-j], A[i][j]
            for i in range(row):  # 翻转01
                for j in range(col):
                    A[i][j] = 1 if A[i][j] == 0 else 0
            return A
    

    问题描述:【Array】1007. Minimum Domino Rotations For Equal Row
    解题思路:

    因为多米诺骨牌中只有 1~6 这六种数字,因此对每个数字 i,把数组 A(或数组 B) 全部变为 i 即可,每次更新最小翻转次数。

    • 先利用数组 B,通过翻转,使 A 全部变成相等的数字;
    • 再利用数组 A,通过翻转,使 B 全部变成相等的数字。

    这样总共做两次,取两次中的最小翻转次数。时间复杂度为 O(n)。

    Python3 实现:
    class Solution:
        def minDominoRotations(self, A: List[int], B: List[int]) -> int:
            def compare(A, B):
                min_ = float("inf")
                for i in range(1, 7):
                    cnt = 0
                    flag = True
                    for j in range(len(B)):
                        if A[j] != i and B[j] == i:  # 将B中的数与A翻转
                            cnt += 1
                        elif A[j] == i:  # A不用翻转
                            continue
                        else:  # A无法变成全等的数字
                            flag = False
                            break
                    if flag:
                        min_ = min(min_, cnt)  # 更新最小值
                return min_
            
            minA = compare(A, B)  # 利用B翻转使A全等
            minB = compare(B, A)  # 利用A翻转使B全等
            min_ = min(minA, minB)
            return min_ if min_ != float("inf") else -1  # 如果都无法翻转返回-1
    

    相关文章

      网友评论

          本文标题:Leetcode 【832、1007】

          本文链接:https://www.haomeiwen.com/subject/jzciqctx.html